【发布时间】:2013-05-27 17:53:59
【问题描述】:
我正在制作一个包含文件复制的应用程序,但是当我浏览一个大目录 (1000+) 文件并将它们复制到另一个文件夹时,它使用了 290+ MB 的 RAM。
那么,有什么方法可以在不创建FileOutoutStream 类的新实例的情况下更改FileOutputStream 的File?
编辑:
这是我的 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
【问题讨论】:
-
你要关闭你的流吗?
-
Java 的哪个版本?理想的答案取决于它。 Java 7 有一个新的文件 API,它比之前可用的 API 好几倍。
-
我的是 7u21。但使用 7u17 是一种选择
-
好的,因为这是 7,去看看
Files。请参阅@AndyThomas-Cramer 的答案以获取链接。这个类有一个方便的.copy()方法... -
我已经实现了那个方法,它只占用了我大约 12MB 的 RAM 使用量......这里有什么帮助吗?完成后,我将所有变量都设置为 null,因此被 GC 选中...我不知道为什么它占用了这么多 RAM