我在网络驱动器上有一个拥有数百万个文件的目录。如果我尝试用
阅读它folder.listFiles()
这将花费很多时间,直到生成的数组将填充文件。
我希望通过一个文件接收文件并打印出进度。
我怎样才能用Java做到这一点?
答案 0 :(得分:2)
您可以尝试使用DirectoryStream
:
Path dir = Paths.get("C:\\"); // directory to list
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
for (Path entry: stream) {
System.out.println(entry);
}
} catch (DirectoryIteratorException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
如果需要,您还可以为您制作DirectoryStream
过滤器文件:您需要做的就是为Files.newDirectoryStream
调用添加一个参数:
DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.{txt,png,jpg}");
答案 1 :(得分:0)
您可以使用NIO.2 API:
try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(Paths.get("/path/to/directory"))) {
for (Path path : directoryStream) {
System.out.println(path.toString());
}
} catch (IOException ex) {}