获取目录中与filename中特定String匹配的图像文件名列表

时间:2015-01-08 16:56:47

标签: java file-io

我的目录是+ - 5000张图片。 文件名是根据产品ID构建的。

示例 - > ID为'EAN456'的产品 图像目录中属于此产品的图像 - > EAN456.jpg,EAN456-1.jpg,EAN456-2.jpg

因此,通过Java代码,我想要检索所有与产品ID匹配的文件名的图像。 在这个例子中,EAN456.jpg和所有顺序图像(用' - '分隔)EAN456-1.jpg EAN456-2.jpg

我知道你可以在java中循环目录并检查每个Filename以查看它是否在文件名中有ID ...但循环这么多文件似乎不是最好的方法...

private void getImagesFromFolder(String directoryName)
{
    File directory = new File(directoryName);
    File [] files = directory.listFiles();
    //
    for (File file : files){
        if(file.isFile()) {
            // check if filename equals product id ...
        }            
    }    
}

有人可以帮我一个好方法吗? 谢谢!

3 个答案:

答案 0 :(得分:2)

您可以使用FilenameFilter获取其名称以产品ID开头的文件,如下所示:

File dir = new File(".");
    File [] files = dir.listFiles(new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            return name.startsWith("EAN456");
        }
    });

答案 1 :(得分:1)

为了避免循环遍历许多文件,您可以尝试读取文件。获取EAN456,然后继续使用EAN456-1,EAN456-2等,直到文件不存在。给你所有的文件,你不必循环。

答案 2 :(得分:1)

使用Apache Commons IO FileUtils.listFiles

(List<File>) FileUtils.listFiles(directory, new RegexFileFilter(product.id + "[-]*[0-9]*\\.jpg"), DirectoryFileFilter.DIRECTORY);

<强>更新

适用于所有类型的扩展程序

(List<File>) FileUtils.listFiles(directory, new RegexFileFilter(product.id + "[-]*[0-9]*\\.(.+)", DirectoryFileFilter.DIRECTORY);

这将匹配具有所有扩展名的文件。没有任何扩展名的文件将被忽略

如果您要列出要列出的文件扩展名列表,请使用以下正则表达式

product.id + [-]*[0-9]*\\.(png|jpg|jpeg)