我正在创建一个包含文件复制的应用程序,但是当我浏览一个大目录(1000+)文件并将它们复制到另一个文件夹时,它会使用290+ MB的RAM。
那么,有没有办法在不创建File
类的新实例的情况下更改FileOutputStream
的{{1}}?
编辑:
这是我的Java 7 API版本。
FileOutoutStream
请记住,这是在一个for循环中,正在测试1000多个文件计数。 使用当前的方法,我使用270+ MB的RAM
答案 0 :(得分: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 ) { }
}
}
答案 1 :(得分:1)
看一下这个问题:Standard concise way to copy a file in Java?
具体地
...,Apache Commons IO是要走的路,特别是FileUtils.copyFile();它为你处理所有繁重的工作。
答案 2 :(得分:0)
Java 7中的某些nio2怎么样?
Path source = // ...
Path target = // ...
Files.copy(source, target);
有关详细信息,请参阅Files.copy(...)的javadoc。另请参阅可选参数CopyOption。