SDカードからプラグインされたUSBドライブにディレクトリをコピーするためにしばらく使用していたルーチンがあります。動作しますが、3000 枚の写真がある可能性があるため、少し遅くなることがわかります。だから私はある種の更新進行状況バーを実装しようとしています。
コピーを行う私のコードは次のとおりです。
public void copyDirectory(File sourceLocation , File targetLocation)
throws IOException {
Log.e("Backup", "Starting backup");
if (sourceLocation.isDirectory()) {
if (!targetLocation.exists() && !targetLocation.mkdirs()) {
throw new IOException("Cannot create dir " + targetLocation.getAbsolutePath());
}
String[] children = sourceLocation.list();
for (int i=0; i<children.length; i++) {
copyDirectory(new File(sourceLocation, children[i]),
new File(targetLocation, children[i]));
}
} else {
Log.e("Backup", "Creating backup directory");
File directory = targetLocation.getParentFile();
if (directory != null && !directory.exists() && !directory.mkdirs()) {
throw new IOException("Cannot create dir " + directory.getAbsolutePath());
}
InputStream in = new FileInputStream(sourceLocation);
OutputStream out = new FileOutputStream(targetLocation);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
Log.e("Backup", "Finished");
}
}
開始する前にディレクトリの大きさを確認する必要があると思いますので、追加しました:
public static int CountFilesInDirectory(String location) {
File f = new File(location);
int count = 0;
for (File file : f.listFiles()) {
if (file.isFile()) {
count++;
}
}
return count;
}
でも、どうやってAとBを合体させればいいのかわからない。更新のために適切な場所でインクリメントする方法がわかりません。- 私は完全に間違った道を進んでいる可能性があります! ヒントをいただければ幸いです。