2

ファイルのコピーを含むアプリケーションを作成していますが、大きなディレクトリ (1000 以上) のファイルを調べて別のフォルダにコピーすると、290 MB 以上の RAM が使用されます。

では、クラスの新しいインスタンスを作成せずにFileofを変更する方法はありますか?FileOutputStreamFileOutoutStream

編集:

これが私のJava 7 APIバージョンです。

Path source = FileSystems.getDefault().getPath(Drive.getAbsolutePath(), files[i].getName());
        Path destination = FileSystems.getDefault().getPath(Save);
        try {
        Files.copy(source, destination);
        } catch (FileAlreadyExistsException e) {
            File file = new File(Save + files[i]);
            file.delete();
        }

これは、1000 以上のファイル数でテストされている for ループ内にあることに注意してください。現在の方法では、270 MB 以上の RAM を使用しています

4

3 に答える 3

7

いいえ、FileOutputStream を別のファイルにリダイレクトすることはできません。

Java 7 を使用している場合は、新しいFilesクラスを使用してファイルをコピーできます。Files.copy()メソッドは、ほとんどの作業を行うことができます。

それ以外の場合は、ストリームを閉じていることを確認してください。Java 7 のtry-with-resourcesより前は、次のようになっていました。

FileOutputStream out = null;
try {
    // Create the output stream
    // Copy the file
} catch (IOException e) {
    // Do something
} finally {
    if ( null != out ) {
       try { out.close(); } catch ( IOException ) { }
    }
}
于 2013-05-31T20:23:56.743 に答える
1

この質問を見てください: Javaでファイルをコピーする標準的な簡潔な方法?

具体的には

...、Apache Commons IO、具体的には FileUtils.copyFile(); が最適です。それはあなたのためにすべての重い持ち上げを処理します。

于 2013-05-31T20:23:25.227 に答える