0

これは、オンラインで見つけたアセットから内部ストレージに 1 つのファイルをコピーするための元のコードです。

Context Context = getApplicationContext();
String DestinationFile = Context.getFilesDir().getPath() + File.separator + "DB.sqlite";
if (!new File(DestinationFile).exists()) {
  try {
    CopyFromAssetsToStorage(Context, "Database/DB.sqlite", DestinationFile);
  } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
}

private void CopyFromAssetsToStorage(Context Context, String SourceFile, String DestinationFile) throws IOException {
  InputStream IS = Context.getAssets().open(SourceFile);
  OutputStream OS = new FileOutputStream(DestinationFile);
  CopyStream(IS, OS);
  OS.flush();
  OS.close();
  IS.close();
}
private void CopyStream(InputStream Input, OutputStream Output) throws IOException {
  byte[] buffer = new byte[5120];
  int length = Input.read(buffer);
  while (length > 0) {
    Output.write(buffer, 0, length);
    length = Input.read(buffer);
  }
}

上記のコードは、1 つのファイルをコピーする場合に問題なく動作します。ただし、1つのファイルではなく複数のファイルをコピーしたいです。MT8に続いて、コードを次のように変更しました。

public class MainActivity extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

            ArrayList<String> destFiles = new ArrayList<String>();
            destFiles.add("FileB.jpg");
            destFiles.add("FileC.jpg");
            destFiles.add("FileD.jpg");

            for(int i =0 ; i < destFiles.size(); i++) {
            Context Context = getApplicationContext();
            String DestinationFile = Context.getFilesDir().getPath() + File.separator + "FileA.db";
            if (!new File(DestinationFile).exists()) {
              try {
                CopyFromAssetsToStorage(Context, "database/FileA.db", destFiles.get(i));
              } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
              }
            }
            }
    }

            private void CopyFromAssetsToStorage(Context Context, String SourceFile, String DestinationFile) throws IOException {
              InputStream IS = Context.getAssets().open(SourceFile);
              OutputStream OS = new FileOutputStream(DestinationFile);
              CopyStream(IS, OS);
              OS.flush();
              OS.close();
              IS.close();
            }
            private void CopyStream(InputStream Input, OutputStream Output) throws IOException {
              byte[] buffer = new byte[5120];
              int length = Input.read(buffer);
              while (length > 0) {
                Output.write(buffer, 0, length);
                length = Input.read(buffer);
              }
            }
}

ただし、ファイルはコピーされません。私が間違ってやった部分はありますか?

4

1 に答える 1