Jam*_*mes 11 java file out-of-memory
当我列出包含300,000个带有Java文件的目录的文件时,会发生内存不足.
String[] fileNames = file.list();
Run Code Online (Sandbox Code Playgroud)
我想要的是一种方法,可以逐步列出目录的所有文件,无论该特定目录中有多少文件,并且没有默认64M堆限制的"内存不足"问题.
我有谷歌一段时间,并没有在纯Java中找到这样的方式.
请帮我!!
注意,JNI是一种可能的解决方案,但我讨厌JNI.
我知道你说"使用默认的64M堆限制",但让我们看一下事实 - 你想使用Java提供的机制在内存中保存(可能)大量项目.所以,除非你有一些可怕的理由,否则我会说增加堆是可行的.
以下是JavaRanch上相同讨论的链接:http: //www.coderanch.com/t/381939/Java-General/java/iterate-over-files-directory
编辑,回应评论:我说他想在内存中保存大量项目的原因是因为这是Java提供的唯一机制,用于列出目录而不使用本机接口或特定于平台的机制(并且OP表示他想要"纯Java").
您唯一可能的解决方案是 Java7,然后您应该使用迭代器。
final Path p = FileSystems.getDefault().getPath("Yourpath");
Files.walk(p).forEach(filePath -> {
if (Files.isRegularFile(filePath)) {
//Do something with filePath
}
});
Run Code Online (Sandbox Code Playgroud)