如何从带有模式/过滤器的目录中获取文件

时间:2012-11-22 14:47:46

标签: java regex file filter directory

我必须从PDF文件目录中获取文件。我有问题,我没有一个字段来整合所有数据来查找文件。

以下是一个例子:

文件名:

Comp_20120619_170310_2_632128_FC_A_8_23903.pdf

文件名生成:

Comp_20120619_--------_2_632128_FC_A_8_23903.pdf

我没有'"--------"字段来创建文件COMPLETE名称。

我正在尝试File.list但我找不到正确的文件。

4 个答案:

答案 0 :(得分:17)

您可以定义FilenameFilter以匹配文件名,如果文件名与您要查找的文件名匹配,则返回true。

    File dir = new File("/path/to/pdfs");
    File[] files = dir.listFiles(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            return name.matches("Comp_20120619_[^_]*_2_632128_FC_A_8_23903.pdf");
        }
    });

listFiles()方法返回一个File对象数组。这是有道理的,因为可能有多个文件与模式匹配(至少在理论上,尽管不一定在您的系统中)。

我使用正则表达式来匹配文件名,使用[^_]*来匹配您不确定的部分。但是,如果文件名匹配,您可以使用任何将返回布尔值的函数。例如,您可以使用startsWithendsWith代替正则表达式。

答案 1 :(得分:1)

list()有什么问题?

File folder = new File("path/to/pdffilefolder");
String[] allFilesInThatFolder = folder.list();
// contains only files, no folders.

答案 2 :(得分:1)

可以使用WildcardFileFilter(org.apache.commons.io.filefilter)

代码看起来很简单:

FilenameFilter filenameFilter = new WildcardFileFilter("Comp_20120619_*_2_632128_FC_A_8_23903.pdf");
String[] pdfFileNames = yourDir.list(filenameFilter);
if(pdfFileNames != null ) {
    for (String pdfName : pdfFileNames)

答案 3 :(得分:1)

希望它有效..

String[] pdfFiles= yourDir.listFiles(getFileNameFilterMachingWithFileName("Comp_20120619_"));



private FilenameFilter getFileNameFilterMachingWithFileName(final String 
fileNameStart) {
        return new FilenameFilter() {
            @Override
             public boolean accept(File dir, String name) {
               return (name.toUpperCase().startsWith(fileNameStart.toUpperCase()) && name.toUpperCase().endsWith(".PDF"));          
             }
        };
    }