例如:目录中有10亿个文件,我想读取文件并获取其数据。但是我找不到读取其中一部分的解决方案,因为10亿个文件太大,会导致oom,我想要使用这样的方式读取部分目录文件:
FileUtils.getFils("directory path",startIndex,readCount);
如何解决?
答案 0 :(得分:0)
您可能要为此使用Files#walk:
try {
Files.walk(Paths.get(directoryPath))
.filter(p -> p.toFile().isFile()) // read only files
.skip(OFFSET)
.limit(MAX_FILES_PER_ITERATION)
.forEach(entry -> ... // do you processing here);
} catch (IOException e) {
// add your exception handling here
e.printStackTrace(System.err);
}
只需将其添加到循环中,并在每次迭代后递增OFFSET
,直到达到10亿。我不确定这是否是最佳方法,但是请尝试一下,看看它是如何工作的。