2017-05-13 1 views
2

私はJavaでかなり新しいです(約2週間学習) 私はJavaでグローバルファイル検索を行う最もクリーンな方法を見つけようとしています。 Pythonのos.walkに同様の機能を使用する可能性はありますか? os.walkを使用する場合は、ソースを開始するベースディレクトリを置くだけで済みます。 pythonのos.walkのようにJavaを使ってハードディスクにファイルを保存

は私がFiles.walk()関数を見つけましたが、私は正しい構文はそれを返すためにファイルの名前を提供することができません。

私の主な目的は、検索機能への主な機能からファイル名を送信し、このファイルの絶対的なパッチを受信することです。 誰かがそれを助けることができますか?

答えて

1

あなたは、ほとんど存在し、Files.walkは、ディレクトリ内のすべてのファイルを反復処理するための正しい方法です。 Here'sそれのjavadocが、これはこう言われる、

戻りなまけ与え始まるファイルをルートファイル ツリーを歩いてパスが移入されストリーム。

あなたがする必要があるのは、他の方法には、このメソッドの呼び出しをラップ(つまり、パスと検索文字列を受け入れる)と一致するファイルをのリストを返す、例えば次のとおりです。

public List<String> search(String path, String searchString) throws Exception{ 
    Stream<Path> paths = Files.walk(Paths.get(path)); 
    try{ 
     List<String> files = paths 
       .filter(Files::isRegularFile) 
       .filter(p -> p.getFileName().toString().toLowerCase().contains(searchString)) 
       .map(p -> p.toString()) 
       .collect(Collectors.toList()); 
     return files; 
    }finally{ 
     if(null != paths){ 
      paths.close(); 
     } 
    } 
} 

この例では、ファイルのみを返します。あなたはそれは同様のディレクトリを返したい場合、あなたはOR条件でFiles.isDirectoryメソッドを使用することができます。ここにはisDirectoryのjavadocがあります。

関連する問題