2017-03-10 32 views
1

我有一个网络驱动器上有一百万个文件的目录。如果我尝试用如何在Java中迭代读取目录中的所有文件?

folder.listFiles() 

读它,它会占用大量的时间,直到生成的数组将填充文件。

我想通过一个接收文件并打印输出进度。

我该如何在Java中做到这一点?

+2

HTTP://docs.oracl e.com/javase/7/docs/api/java/nio/file/DirectoryStream.html – Aubin

回答

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}"); 
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) {} 
相关问题