2017-12-18 4 views
0

すべてのファイル名を特定のディレクトリにリストしています(再帰的に)。これには、サブディレクトリにもファイル名が表示されます。 Files.walkFileTree:私は1つの特定のサブディレクトリの下のファイル/ディレクトリを表示しないようにすることを制限することができますどのようにjavaでは、すべてのファイルを再帰的に表示します。 1つのサブディレクトリをスキップする

File file = new File(FILE_PATH); 
    // Recursively search for all the resource files. 
    Collection files = FileUtils.listFiles(file, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); 
    for (Iterator iterator = files.iterator(); iterator.hasNext();) 
    { 
     File fileIter = (File) iterator.next(); 
     System.out.println("File = " + fileIter.getPath()); 

    } 
+0

ここでロジックが機能するかどうかを簡単に追加できます。 –

+2

FileFilterも使うことができます –

+0

"filefilter"のようなinbuiltオプションが "if"を使うよりも良いかどうか疑問に思っています – user1631306

答えて

1

のJava SEは、これを行うための独自の方法を持っている(1つの特定のディレクトリをスキップします)。 FileVisitor(通常はSimpleFileVisitorのサブクラス)を渡します。それぞれのメソッドはFileVisitResultを返します。ディレクトリをスキップするには、単にFileVisitResult.SKIP_SUBTREEを返す:

Files.walkFileTree(file.toPath(), 
    new SimpleFileVisitor<Path>() { 
     @Override 
     public FileVisitResult preVisitDirectory(Path dir, 
               BasicFileAttributes attr) 
     throws IOException { 
      if (dir.endsWith("forbiddenDir")) { 
       return FileVisitResult.SKIP_SUBTREE; 
      } 
      return FileVisitResult.CONTINUE; 
     } 

     @Override 
     public FileVisitResult visitFile(Path file, 
             BasicFileAttributes attr) 
     throws IOException { 
      System.out.println("File = " + file); 
      return FileVisitResult.CONTINUE; 
     } 
    }); 

Pathクラスは廃止されたFileクラスのための現代的な代替品です。多くのメソッドがエラーを正しく報告しないので、Fileの使用は避けるべきです。絶対にFileオブジェクトが必要な場合、PathにはtoFile()メソッドがあります。逆に、FileにはtoPath()メソッドがあります。

関連する問題