Перечисление файлов в каталоге, соответствующем шаблону в Java
Я ищу способ получить список файлов, которые соответствуют шаблону (pref regex) в данном каталоге.
Я нашел учебник онлайн, который использует пакет commons-io apache со следующим кодом:
Collection getAllFilesThatMatchFilenameExtension(String directoryName, String extension)
{
File directory = new File(directoryName);
return FileUtils.listFiles(directory, new WildcardFileFilter(extension), null);
}
но это просто возвращает базовую коллекцию (согласно документы это коллекция java.io.File). Есть ли способ сделать это, который возвращает типобезопасную универсальную коллекцию?
6 ответов:
посмотреть 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); }
начиная с Java 8 вы можете использовать лямбды и получить более короткий код:
File dir = new File(xmlFilesDirectory); File[] files = dir.listFiles((d, name) -> name.endsWith(".xml"));
следующий код создаст список файлов на основе метода accept
FileNameFilter.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.НИО пакет для достижения того же результата:
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 ) ); }Я брошу предупреждение, хотя. Если вы можете жить с этим предупреждением,то вы сделали.
Comments