我期待看到位於路徑d:/ test文件夾下的所有文件的列表。但是,我只能直接在該文件夾下獲取文件,但不能遞歸。 代碼:Files.newDirectoryStream(路徑)不會遞歸地返回文件
結果:
a.txt
folder
我期待看到位於路徑d:/ test文件夾下的所有文件的列表。但是,我只能直接在該文件夾下獲取文件,但不能遞歸。 代碼:Files.newDirectoryStream(路徑)不會遞歸地返回文件
結果:
a.txt
folder
另一種方式來擴展這個你自己的邏輯:
public static void printFileNamesRecursively(String path){
Path yourPath = FileSystems.getDefault().getPath(path);
try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(yourPath)) {
for (Path p : directoryStream) {
System.out.println(p.getFileName());
if(p.toFile().isDirectory()){
printFileNamesRecursively(p.toString());
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
這是DirectoryStream正確的行爲。相反,您可以使用org.apache.commons.io.FileUtils以遞歸方式枚舉文件。
Files::newDirectoryStream
的行爲就是這樣。如果要遞歸地檢索給定目錄及其子目錄中的所有目錄和文件,則需要Files::walk
或Files::walkFileTree
。例如(我假設你使用Java 8):
Path path = //...
try {
Files.walk(path).map(Path::getFileName).forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
您的意思是*遞歸*,而不是* *迭代? – glee8e