使用nio.file.DirectoryStream递归列出目录中的所有文件;

2022-09-01 00:43:06

我想列出指定目录中的所有文件和该目录中的子目录。不应列出任何目录。

我当前的代码如下。它不能正常工作,因为它只列出指定目录中的文件和目录。

我该如何解决这个问题?

final List<Path> files = new ArrayList<>();

Path path = Paths.get("C:\\Users\\Danny\\Documents\\workspace\\Test\\bin\\SomeFiles");
try
{
  DirectoryStream<Path> stream;
  stream = Files.newDirectoryStream(path);
  for (Path entry : stream)
  {
    files.add(entry);
  }
  stream.close();
}
catch (IOException e)
{
  e.printStackTrace();
}

for (Path entry: files)
{
  System.out.println(entry.toString());
}

答案 1

Java 8为此提供了一个很好的方法:

Files.walk(path)

此方法返回 .Stream<Path>


答案 2

创建一个方法,如果下一个元素是目录,则该方法将调用自身

void listFiles(Path path) throws IOException {
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) {
        for (Path entry : stream) {
            if (Files.isDirectory(entry)) {
                listFiles(entry);
            }
            files.add(entry);
        }
    }
}