2016-07-08 9 views
1

どのようにいくつかのフォルダのすべてのサブフォルダを取得できますか?私はJDK 8とnioを使用します。例えばJava nio、いくつかのフォルダのすべてのサブフォルダを取得

picture

、フォルダ "Designs.ipj" 方法は{ "ワークスペース"、 "ライブラリ1を"}返す必要があります

は、事前にありがとうございます!

+2

あなたの投稿を編集し、あなたの質問に画像を含める必要があります。最終的に、外部リンクはある時点では利用できなくなり、将来のユーザーはあなたの質問から恩恵を受けることができなくなります。 – Andrej

+0

https://docs.oracle.com/javase/tutorial/essential/io/dirs.html#listdir – Fildor

+0

hmmmこれにはノンブロッキングIOが必要ですか? – niceman

答えて

1
List<Path> subfolder = Files.walk(folderPath, 1) 
      .filter(Files::isDirectory) 
      .collect(Collectors.toList()); 

それはあなただけのサブフォルダが必要な場合は、深さ1にFOLDERPATHとすべてのサブフォルダが含まれているだけで追加します。

subfolders.remove(0); 
+0

ありがとうございました! –

0

あなたは、フォルダ内のすべての項目を読んで、ディレクトリを除外する必要があり、このプロセスを必要な回数だけ繰り返す。このおLISTFILESを(使用することができますを行うには

File folder = new File("your/path"); 
Stack<File> stack = new Stack<File>(); 
Stack<File> folders = new Stack<File>(); 

stack.push(folder); 
while(!stack.isEmpty()) 
    { 
     File child = stack.pop(); 
     File[] listFiles = child.listFiles(); 
     folders.push(child); 

     for(File file : listFiles) 
     { 
      if(file.isDirectory()) 
      { 
       stack.push(file); 
      } 
     }    
    } 

Getting the filenames of all files in a folder は単純な再帰関数は単に無限ループを警戒していることを確認し、また働くだろう参照してください。

しかし、私はもう少しDirectoryStreamに部分的です。これにより、仕様に合った項目だけを追加できるようにフィルタを作成することができます。

DirectoryStream.Filter<Path> visibleFilter = new DirectoryStream.Filter<Path>() 
{ 
    @Override 
    public boolean accept(Path file) 
    { 
     try 
     { 
      return Files.isDirectory(file)); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 

     return false; 
} 

try(DirectoryStream<Path> stream = Files.newDirectoryStream(directory.toPath(), visibleFilter)) 
{ 
    for(Path file : stream) 
    { 
     folders.push(child); 
    } 
} 
関連する問題