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();
        }

请记住,这是在一个 for 循环中,正在对 1000+ 个文件计数进行测试。使用当前方法,我使用 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

看看这个问题:Standard concise way to copy a file in Java?

具体来说

...,Apache Commons IO 是要走的路,特别是 FileUtils.copyFile(); 它为您处理所有繁重的工作。

于 2013-05-31T20:23:25.227 回答
0

Java 7 中的一些 nio2 怎么样?

Path source = // ...
Path target = // ...
Files.copy(source, target);    

有关详细信息,请参阅Files.copy(...)的 javadoc。另请参见可选参数CopyOption

于 2013-06-17T21:48:12.177 回答