How to get a file with exact extension from ArrayList of files

时间:2016-02-02 10:40:17

标签: java file

File f = new File("abstract_pathnames");
ArrayList<File> files = new ArrayList<File> (Arrays.asList(f.listFiles()));

How can I get a file with specific extension from this list?

2 个答案:

答案 0 :(得分:2)

您可以使用FilenameFilter过滤文件。文件名传递一个String,以防止在列出文件时创建大量File个对象。

此类自JDK 1.0以来就存在。

单扩展过滤器

Java 7及更低示例:

List<File> files = new ArrayList<File>(Arrays.asList(f.listFiles(
    new FilenameFilter() {
        @Override 
        public boolean accept(File dir, String name) {
            return name.endsWith(".ext");
        }
    }
)));

Java 8示例:

List<File> files = new ArrayList<File>(Arrays.asList(f.listFiles(
    (File dir, String name) ->  name.endsWith(".ext")
)));

多个扩展名过滤器

过滤多个扩展程序时,会变得更难。我们首先将允许的扩展名存储在Set&lt;&gt;中,然后使用其contains()方法来比较每个条目。

Set<String> allowed = new HashSet<>();
allowed.add("txt");
allowed.add("exe");
allowed.add("sh");

然后我们在文件过滤器中分割点并比较最后一部分:

List<File> files = new ArrayList<File>(Arrays.asList(f.listFiles(
    new FilenameFilter() {
        @Override 
        public boolean accept(File dir, String name) {
            String[] split = name.split("\.");
            if(split.length == 1)
                return allowed.contains("");
            return allowed.contains(split[split.length - 1]);
        }
    }
)));

答案 1 :(得分:1)

您可以使用以下代码(Java 8)来获取目录的所有pdf个文件:

File dir = new File("/myDirectory");
File[] files = dir.listFiles(f -> f.getName().endsWith(".pdf"));