2012-01-06 31 views

答えて

16

FileFilter(ここでコード化されたanonymously)を渡すDIR FilelistFiles()方法NTO、次のように:

public static File[] findFilesForId(File dir, final String id) { 
    return dir.listFiles(new FileFilter() { 
     public boolean accept(File pathname) { 
      return pathname.getName().equals("a_id_" + id + ".zip"); 
     } 
    }); 
} 

とあなたのよう呼び出すことができます:

File[] matchingFiles = findFilesForId(new File("some/path/to/dir"), "XXX"); 
方法としてバンドルさ

File dir = new File("some/path/to/dir"); 
final String id = "XXX"; // needs to be final so the anonymous class can use it 
File[] matchingFiles = dir.listFiles(new FileFilter() { 
    public boolean accept(File pathname) { 
     return pathname.getName().equals("a_id_" + id + ".zip"); 
    } 
}); 


、それは次のようになります。

または単に存在を確認するには、

boolean exists = findFilesForId(new File("some/path/to/dir"), "XXX").length > 0 
4

私は a_id_126.zip a_id_123.zip、a_id_124.zip、a_id_125.zipで名前のzipファイルを作成し、それが正常に動作ように見えますが、それはあなたのために適切な答えだ場合、私はよく分かりません。上記のファイルは

public static void main(String[] args) { 

    String pathToScan = "."; 
    String fileThatYouWantToFilter; 
    File folderToScan = new File(pathToScan); // import -> import java.io.File; 
    File[] listOfFiles = folderToScan.listFiles(); 

    for (int i = 0; i < listOfFiles.length; i++) { 

     if (listOfFiles[i].isFile()) { 
      fileThatYouWantToFilter = listOfFiles[i].getName(); 
      if (fileThatYouWantToFilter.startsWith("a_id_") 
        && fileThatYouWantToFilter.endsWith(".zip")) { 
       System.out.println("found" + " " + fileThatYouWantToFilter); 
      } 
     } 
    } 
} 
a_id_126.zipた
  • a_id_125.zipた

  • a_id_124.zipた
  • a_id_123.zipた

    • が存在する場合 出力は次されます
  • 0

    のJava 7は、パターンマッチング(PathMatcher)と再帰的なディレクトリ歩行のためのいくつかの良いサポートを持って使用することができます(Files.walkFileTree())。

    ファイルの検索:http://docs.oracle.com/javase/tutorial/essential/io/find.html

    1

    このソリューションは、ボヘミアンの答えに一般化し、元の質問の文脈では、OracleのJavaドキュメントで、このページでは良いスタートです。正規表現を使用し、内部クラスをJava 8ラムダ式に置き換えます。元の実装に感謝@Bohemian。

    import java.io.File; 
    
    public class FileFinder { 
        public static void main(String[] args){ 
         File directory = new File("D:\\tmp"); 
         String id = "20140430104033"; 
         for (File f : findFilenamesWithId(id, directory)){ 
          System.out.println(f.getAbsoluteFile()); 
         } 
        } 
    
        /** Finds files in the specified directory whose names are formatted 
         as "a_id_ID.zip" */ 
        public static File[] findFilenamesWithId(String ID, File dir) { 
         return findFilenamesMatchingRegex("^a_id_" + ID + "\\.zip$", dir); 
        } 
    
        /** Finds files in the specified directory whose names match regex */ 
        public static File[] findFilenamesMatchingRegex(String regex, File dir) { 
         return dir.listFiles(file -> file.getName().matches(regex)); 
        } 
    } 
    
    関連する問題