将文件列入与Java中的模式匹配的目录中

我正在寻找一种方法来获得在给定的目录中匹配模式(pref regex)的文件列表。

我已经find了一个在线教程,使用apache的commons-io软件包,下面的代码:

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

但是,这只是返回一个基本集合(根据文档,它是一个java.io.File的集合)。 有没有办法做到这一点,返回一个types安全的generics集合?

请参阅文件#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); } 

从Java 8开始,您可以使用lambdas并实现更短的代码:

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

下面的代码将根据FileNameFilter的accept方法创build一个文件列表。

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

由于Java 7可以通过java.nio包来实现相同的结果:

 Path dir = ...; List<File> files = new ArrayList<>(); try (DirectoryStream<Path> 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<Character,Integer> hm = new TreeMap<Character, Integer>(); 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 } } 

那么你现有的代码包装呢?

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

我会发出警告。 如果你能忍受这个警告,那么你就完成了。