2017-04-15 27 views
0

ファイル名に特定の単語を含むすべてのドキュメント/グラフィックス拡張子を持つファイルを選択したフォルダから検索するコードを作成しようとしています。私は似例を見つけることができませんでしたし、私はこの1が最も近いもので、いくつかの異なるアプローチを試してみた:Javaでの拡張子とワイルドカード検索による再帰的なファイル検索

private void startButtonActionPerformed(java.awt.event.ActionEvent evt) {            

    File startingPath = dirChooser.getCurrentDirectory(); 
    String[] extensions = new String[] { 
     "txt", "doc", "docx", "jpg", "jpeg", "pdf", "odt", "png", "bmp"}; 
    // there are about 20 different patterns like the ones below 
    Pattern p = Pattern.compile(".*password.*|.*user.*|.*profile.*"); 
    List<File> files = (List<File>) FileUtils.listFiles(
       startingPath, extensions, true); 
    files.forEach((file) -> { 
     if (file.isFile()){ 
      Matcher m = p.matcher(file.toString().toLowerCase()); 
      if (m.matches()) { 
       filesArea.append(file.toString() + "\n"); 
       noOfFiles++; 
      }  
     } 
    }); 
} 

拡張検索は完璧に動作しますが、何らかの理由でパターン検索は、一部のフォルダのみではなく他の人と作品。私はより良いアプローチがあると確信していますが、この1つは最も簡単で(ほとんど)働いていたようです。どのように私はそれを完全に動作させることができる任意のアイデア?

答えて

0

どのようにそれについて:

public boolean accept(Path e) 
{ 
    FileNameExtensionFilter filter = new FileNameExtensionFilter("Extensions", "txt", "doc", "docx", "jpg", "jpeg", "pdf", "odt", "png", "bmp"); 
    return filter.accept(e.toFile()); 
} 

このコードは、あなたの言葉や特定の拡張子を含むファイルへのパスが一覧表示されます:

Files.walk(dirChooser.getCurrentDirectory().toPath()) 
    .filter(file -> Pattern.matches(".*password.*|.*user.*|.*profile.*", file.getFileName().toString()) && accept(file)) 
    .forEach(System.out::println); 

受け入れる機能は次のようになります。しかしそれはストリームなので、何でも好きなことをすることができます。

+0

ご返信いただき、ありがとうございました! – momp

関連する問題