从文件夹及其子文件夹中查找特定文件类型

时间:2013-12-05 13:44:04

标签: java file io file-search

我正在编写一种方法来从文件夹和子文件夹中获取特定文件类型,如pdf或txt,但我不能解决这个问题。这是我的代码

  // .............list file
    File directory = new File(directoryName);

    // get all the files from a directory
    File[] fList = directory.listFiles();

    for (File file : fList) {
        if (file.isFile()) {
            System.out.println(file.getAbsolutePath());
        } else if (file.isDirectory()) {
            listf(file.getAbsolutePath());
        }
    }

我当前的方法列出了所有文件,但我需要特定的文件

6 个答案:

答案 0 :(得分:9)

对于不需要通过子目录递归的过滤列表,您可以这样做:

directory.listFiles(new FilenameFilter() {
    boolean accept(File dir, String name) {
        return name.endsWith(".pdf");
    }});

为了提高效率,您可以提前创建FilenameFilter,而不是每次调用。

在这种情况下,因为您还要扫描子文件夹,所以无需过滤文件,因为您仍需要检查子文件夹。事实上,你几乎就在那里:

File directory = new File(directoryName);

// get all the files from a directory
File[] fList = directory.listFiles();

for (File file : fList) {
    if (file.isFile()) {
       if (file.getName().endsWith(".pdf")) {
           System.out.println(file.getAbsolutePath());
       }
    } else if (file.isDirectory()) {
        listf(file.getAbsolutePath());
    }
}

答案 1 :(得分:6)

if(file.getName().endsWith(".pdf")) {
    //it is a .pdf file!
}

/ <强> * ** /

答案 2 :(得分:2)

答案 3 :(得分:1)

使用File.listFiles(FileFilter)

示例:

File[] fList = directory.listFiles(new FileFilter() {
    @Override
    public boolean accept(File file) {
        return file.getName().endSwith(".pdf");
    }
});

答案 4 :(得分:0)

您可以使用apache fileUtils类

String[] exte= {"xml","properties"};
Collection<File> files = FileUtils.listFiles(new File("d:\\workspace"), exte, true);

for(File file: files){
     System.out.println(file.getAbsolutePath());
}

答案 5 :(得分:0)

我的建议是使用FileUtilsNIO.2 NIO.2允许使用Depth-First搜索Stream,例如,您可以在一行代码中打印具有指定扩展名的所有文件:

Path path = Path.get("/folder");
try{
    Files.walk(path).filter(n -> n.toString().endsWith(".extension")).forEach(System.out::println)
}catch(IOException e){
    //Manage exception
}