我有一个包含20M +文件的目录.如果我试试
folder.list();
获取文件大约需要5~10分钟(有时甚至更多).我不需要所有的文件名,每次只需要少数几个.
在Linux中如果我尝试:
ls -l | head -n 100
:这将永远
ls -f | head -n 100
:响应在几秒钟内获得.
因此,如果我使用ProcessBuilder
并运行类似的东西,我可以快速列出文件ls -f | head -n 100
是否有本地方式在目录中列出固定数量的文件而无需使用ProcessBuilder
?
是的,有使用Java NIO.2和类的方法DirectoryStream
.此类对目录的条目实现惰性迭代.你可以得到的一个实例,DirectoryStream
使用Files.newDirectoryStream(path)
(你可以得到一个实例Path
与静态工厂Paths.get
).
如果您使用的是Java 8,则可以使用更简单的解决方案Files.list()
:
返回一个延迟填充
Stream
的元素,其中的元素是目录中的条目.列表不是递归的.
你可以拥有
ListfileNames = Files.list(path) .map(Path::getFileName) .map(Path::toString) .limit(100) .collect(Collectors.toList());
检索给定的100个文件名path
.