我有一个包含20M +文件的目录.如果我试试
folder.list();
Run Code Online (Sandbox Code Playgroud)
获取文件大约需要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<Path>使用Files.newDirectoryStream(path)(你可以得到一个实例Path与静态工厂Paths.get).
如果您使用的是Java 8,则可以使用更简单的解决方案Files.list():
返回一个延迟填充
Stream的元素,其中的元素是目录中的条目.列表不是递归的.
你可以拥有
List<String> fileNames = Files.list(path)
.map(Path::getFileName)
.map(Path::toString)
.limit(100)
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
检索给定的100个文件名path.