2016-12-08 8 views
2

アルゴリズムを実装する方法Java 8は、起動ディレクトリとファイル名を指定して、指定されたディレクトリまたはすべてのサブディレクトリ内のファイルを検索します。 5段階以上ではないネストされています。Javaを使用してディレクトリとサブディレクトリ内のファイルを検索する8

例えば次のようなディレクトリ構造を考えてみます。

Folder 1 
    Folder 2 
     Folder 3 
     Folder 4 
      Folder 5 
       Folder 6 
        nfiles.txt.... 
       MyFile.txt 
       xfile.txt 
      filesInFolder4.... 
     filesInFolder3... 
    ..... 

アルゴリズムはcontaindフォルダ5のファイルにファイルをバックアップを検索し、指定されたファイル名のファイルが存在する場合に報告すべきか?

これを行う方法Java 8

+2

は、あなたがしようとしているものを表示します。 – Holger

+0

@Holger Java NIOのファイルパッケージを試していますが、まだ解決策が見つかりませんでした。 – KayV

+2

['Files.walkFileTree(パス開始、設定オプション、int maxDepth、FileVisitor <?スーパーパス>訪問者)']の 'maxDepth'パラメータに注意してください。]](https://docs.oracle.com/javase/8 /docs/api/java/nio/file/Files.html#walkFileTree-java.nio.file.Path-java.util.Set-int-java.nio.file.FileVisitor-)。このメソッド(またはいずれかの選択肢)を使用しようとしたときに何が失敗しているのかを記述した実際の問題文がなければ、これを解決する方法を教えることは不可能です。 – Holger

答えて

6

Files.findの方法をご覧ください。

try (Stream<Path> stream = Files.find(Paths.get("Folder 1"), 5, 
      (path, attr) -> path.getFileName().toString().equals("Myfile.txt"))) { 
     System.out.println(stream.findAny().isPresent()); 
} catch (IOException e) { 
     e.printStackTrace(); 
} 
+0

これはtrueまたはfalseを返します。私は正確なファイルの場所が欲しい。 – KayV

+1

@KaranVerma 'stream.forEach(System.out :: println);'それはあなたにファイルへの完全なパスを与えます –

1

私は次のように解決策がFiles.findとFiles.walkでの作業を見つける:それはwalkFileTreeよりもシンプルなようで

// Finding a file upto x level in File Directory using NIO Files.find 
    Path start = Paths.get("/Users/***/Documents/server_pull"); 
    int maxDepth = 5; 
    try(Stream<Path> stream = Files.find(start, 
             maxDepth, 
             (path, attr) -> String.valueOf(path).endsWith(".json"))){ 
     String fileName = stream 
          .sorted() 
          .map(String::valueOf) 
          .filter((path) -> { 
           //System.out.println("In Filter : "+path); 
           return String.valueOf(path).endsWith("system_health_12_55_TestServer.json"); 
          }) 
          .collect(Collectors.joining()); 
     System.out.println("fileName : "+fileName); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

// Finding a file upto x level in File Directory using NIO Files.walk 

    Path startWalk = Paths.get("/Users/***/Documents/server_pull"); 
    int depth = 5; 
    try(Stream<Path> stream1 = Files.walk(startWalk, 
              depth)){ 
     String walkedFile = stream1 
          .map(String::valueOf) 
          .filter(path -> { 
           return String.valueOf(path).endsWith("system_health_12_55_TestServer.json"); 
          }) 
          .sorted() 
          .collect(Collectors.joining()); 
     System.out.println("walkedFile = "+walkedFile); 

    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

...

+1

'' String.valueOf(path).endsWith "system_health_12_55_TestServer.json") 'を実行します。ファイル名:次のように –

+0

が出力に含まを取得するには/Users/bng/Documents/server_pull/system_health_12_9_TestServer_India_172_20_12_2.json walkedFile = /Users/bng/Documents/server_pull/system_health_12_9_TestServer_India_172_20_12_2.jsonを、私は二重のフィルタリングを使用しました。 – KayV

関連する問題