2012-01-06 30 views

Respuesta

16

Pase un FileFilter (codificado aquí anonymously) i nto el método listFiles() del dir File, así:

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


liado como un método, que se vería así:

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

y que se podría llamar como:

File[] matchingFiles = findFilesForId(new File("some/path/to/dir"), "XXX"); 

o simplemente para verificar la existencia,

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

he creado archivos zip con el nombre a_id_123.zip, a_id_124.zip, a_id_125.zip, a_id_126.zip y parece que funciona bien, pero no estoy seguro de si es la respuesta correcta para usted. de salida será el siguiente si los archivos mencionados anteriormente existe

  • encontrado a_id_123.zip
  • encontrado a_id_124.zip
  • encontrado a_id_125.zip
  • encontró 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); 
          } 
         } 
        } 
    } 
    
0

Java 7 tiene un buen soporte para reconocimiento de patrones (PathMatcher) y el directorio recursivo para caminar (Files.walkFileTree()). En el contexto de la pregunta original, esta página en la documentación de Java de Oracle es un buen comienzo:

Búsqueda de archivos: http://docs.oracle.com/javase/tutorial/essential/io/find.html

1

Esta solución se generaliza en la respuesta de Bohemia. Utiliza expresiones regulares y también reemplaza la clase interna con expresiones Java 8 lambda. Gracias @Bohemian por la implementación original.

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)); 
    } 
} 
Cuestiones relacionadas