在不创建FileOutputStream的情况下复制文件

时间:2013-05-31 20:15:37

标签: java file-io java-7

我正在创建一个包含文件复制的应用程序,但是当我浏览一个大目录(1000+)文件并将它们复制到另一个文件夹时,它会使用290+ MB的RAM。

那么,有没有办法在不创建File类的新实例的情况下更改FileOutputStream的{​​{1}}?

编辑:

这是我的Java 7 API版本。

FileOutoutStream

请记住,这是在一个for循环中,正在测试1000多个文件计数。 使用当前的方法,我使用270+ MB的RAM

3 个答案:

答案 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