Dev*_*vin 1 java file delete-file
我有一个Java工具,可生成100,000多个文件,我随后在我的流程的"第2步"中使用.由于"第2步"的性质,我不希望任何文件> 1MB.这是我用来删除这些文件的代码:
File[] files = root.listFiles();
for (File file : files) {
if (file.isFile()) {
if (file.length > 1048576) { //size of MB
//delete the file
file.delete();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当文件数量相对较小时,这工作正常.但是,当n> 100,000时,由于内存限制,对listFiles()的调用会导致系统崩溃.我知道你可以根据文件类型过滤结果,但有没有办法根据文件大小来做?或者,是否有另一种方法,我可以轻松地根据文件大小进行大批量删除,不会崩溃我的系统?
FWIW,我正在运行RedHat 6.
我想你应该看一下DirectoryStream.就像你期望的那样,它允许你以流方式迭代目录内容,因此你不会从大目录中耗尽内存:
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dirPath)) {
for (Path entry : stream) {
File file = entry.toFile();
if (file.isFile()) {
if (file.length > 1048576) { //size of MB
//delete the file
file.delete();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可能想查看源代码Files#listFiles(FileFilter).至少在我的版本(Java 1.7,Mac OS)中它是通过调用执行Files#list(),然后复制了所有的比赛,这意味着它占用更多的内存比空间Files#list().