为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花如伊 2019-12-04 10:25:32
我想列出指定目录中的所有文件以及该目录中的子目录。没有目录应列出。我当前的代码如下。它仅列出指定目录中的文件和目录,因此无法正常工作。我怎样才能解决这个问题?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());}
查看完整描述

3 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

Java 8为此提供了一种不错的方法:


Files.walk(path)

此方法返回Stream<Path>。


查看完整回答
反对 回复 2019-12-04
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

制作一个方法,如果下一个元素是目录,该方法将自行调用


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);

        }

    }

}


查看完整回答
反对 回复 2019-12-04
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

检查FileVisitor,非常整洁。


 Path path= Paths.get("C:\\Users\\Danny\\Documents\\workspace\\Test\\bin\\SomeFiles");

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

 try {

    Files.walkFileTree(path, new SimpleFileVisitor<Path>(){

     @Override

     public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {

          if(!attrs.isDirectory()){

               files.add(file);

          }

          return FileVisitResult.CONTINUE;

      }

     });

 } catch (IOException e) {

      e.printStackTrace();

 }


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 1060 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信