2012-01-06 77 views

回答

16

传递一个FileFilter(编码这里anonymously)我n要在DIR FilelistFiles()方法,像这样:

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"); 
    } 
}); 


捆绑作为一种方法,它看起来像:

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"); 

或简单地检查它是否存在,

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

我创建了a_id_123.zip,a_id_124.zip,a_id_125.zip命名zip文件,a_id_126.zip 它看起来像工作正常,但我不知道,如果它是你正确的答案。 输出将是以下如果存在发现a_id_123.zip发现a_id_124.zip

    • 上面列出的文件中发现a_id_125.zip发现a_id_126.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); 
            } 
           } 
          } 
      } 
      
  • 1

    该解决方案推广了波希米亚的答案。它使用正则表达式,并用Java 8 lambda表达式替换内部类。感谢@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)); 
        } 
    } 
    
    相关问题