手順は、
1、Assets フォルダーに画像ファイルを用意する。
2、Assets フォルダーの画像ファイル名のリストを作る。
3、転送先File情報を取得する。
4、転送する。
今まではアプリ固有フォルダに画像ファイルを転送して動作確認をしていた。
実機でUSB接続して、動作確認すると問題が起きる。自前のファイラーで移動できない。
なので、pictureフォルダへ画像ファイルをコピーする。これを最初からしておけば良かった。
クラス MyNumbersInString.java 前の記事参照。
エミュレーターのデバイス設定を変えるとデータは初期化されるようで消滅する。再度コピーが必要。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
中略
setFileNameList();
initFiles();
// Pictures ディレクトリの File 情報の取得は、
// File file = getExternalStoragePublicDirectory( DIRECTORY_PICTURES );
// String absolutePath = file.getAbsolutePath();
}
private AssetManager mAssetManager;
private ArrayList< MyNumbersInString > mFileNameList = new ArrayList<>();
private void setFileNameList() {
String fName;
String[] mList = new String[0];
mAssetManager = getResources().getAssets();
try {
mList = mAssetManager.list("image");
} catch (IOException e) {
e.printStackTrace();
}
for (String s : mList) {
fName = s.toLowerCase(); //小文字に変換;
if (fName.endsWith(".jpg") || fName.endsWith(".png")) { //画像ファイル選択
mFileNameList.add(new MyNumbersInString(s));
}
}
Collections.sort(
mFileNameList, new Comparator< MyNumbersInString >() {
@Override
public int compare(MyNumbersInString mn1, MyNumbersInString mn2) {
return mn1.getName2().compareTo(mn2.getName2());
}
}
);
}
private void initFiles() {
String src = null;
File dst = null;
File dir = new File( getExternalStoragePublicDirectory(DIRECTORY_PICTURES) , "image1" ); // "image1" > "image2" ディレクトリを増やせる
if ( !dir.exists() && !dir.mkdirs() ) {
// 失敗処理
return;
}
for (int i = 0; i < mFileNameList.size(); i++ ) {
src = mFileNameList.get( i ).getName();
dst = new File( dir.getPath(), ( "001-" + src ) ); // "001-" > "002-"添付番号を変えて複数回実行するとファイル数を増やせる
fileCopy( ( "image/" + src ), dst );
}
}
public void fileCopy ( String src, File dst ){
if ( dst.exists() ) return;
try {
InputStream is = getAssets().open( src );
FileOutputStream fos = new FileOutputStream( dst, false );
byte[] buffer = new byte[1024];
int len = 0;
while ( ( len = is.read( buffer ) ) >= 0 ) {
fos.write( buffer, 0, len );
}
is.close();
fos.close();
} catch ( IOException e ) {
return;
}
}