Elenco dei file in una directory che corrisponde a un modello in Java

Sto cercando un modo per ottenere un elenco di file che corrispondono a un modello (pref regex) in una determinata directory.

Ho trovato un tutorial online che utilizza il pacchetto commons-io di apache con il seguente codice:

Collection getAllFilesThatMatchFilenameExtension(String directoryName, String extension) { File directory = new File(directoryName); return FileUtils.listFiles(directory, new WildcardFileFilter(extension), null); } 

Ma questo restituisce solo una raccolta di base (secondo i documenti è una raccolta di java.io.File ). C’è un modo per fare ciò che restituisce una raccolta generica sicura di tipo?

Vedi File # listFiles (FilenameFilter) .

 File dir = new File("."); File [] files = dir.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith(".xml"); } }); for (File xmlfile : files) { System.out.println(xmlfile); } 

Da Java 8 è ansible utilizzare lambdas e ottenere codice più breve:

 File dir = new File(xmlFilesDirectory); File[] files = dir.listFiles((d, name) -> name.endsWith(".xml")); 

Il codice seguente creerà un elenco di file in base al metodo accept di FileNameFilter .

 List list = Arrays.asList(dir.listFiles(new FilenameFilter(){ @Override public boolean accept(File dir, String name) { return name.endsWith(".exe"); // or something else }})); 

Poiché java 7 è ansible il pacchetto java.nio per ottenere lo stesso risultato:

 Path dir = ...; List files = new ArrayList<>(); try (DirectoryStream stream = Files.newDirectoryStream(dir, "*.{java,class,jar}")) { for (Path entry: stream) { files.add(entry.toFile()); } return files; } catch (IOException x) { throw new RuntimeException(String.format("error reading folder %s: %s", dir, x.getMessage()), x); } 
 import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Map; import java.util.Scanner; import java.util.TreeMap; public class CharCountFromAllFilesInFolder { public static void main(String[] args)throws IOException { try{ //C:\Users\MD\Desktop\Test1 System.out.println("Enter Your FilePath:"); Scanner sc = new Scanner(System.in); Map hm = new TreeMap(); String s1 = sc.nextLine(); File file = new File(s1); File[] filearr = file.listFiles(); for (File file2 : filearr) { System.out.println(file2.getName()); FileReader fr = new FileReader(file2); BufferedReader br = new BufferedReader(fr); String s2 = br.readLine(); for (int i = 0; i < s2.length(); i++) { if(!hm.containsKey(s2.charAt(i))){ hm.put(s2.charAt(i), 1); }//if else{ hm.put(s2.charAt(i), hm.get(s2.charAt(i))+1); }//else }//for2 System.out.println("The Char Count: "+hm); }//for1 }//try catch(Exception e){ System.out.println("Please Give Correct File Path:"); }//catch } } 

Che ne dici di un wrapper attorno al tuo codice esistente:

 public Collection getMatchingFiles( String directory, String extension ) { return new ArrayList()( getAllFilesThatMatchFilenameExtension( directory, extension ) ); } 

Comunque, lancerò un avvertimento. Se puoi vivere con quell’avvertimento, allora hai finito.