获取目录中与文件名中的特定字符串匹配的图像文件名列表

Get list of image filenames in directory that match specific String in filename

我有一个包含 +- 5000 张图像的目录。 文件名是根据产品 ID 构建的。

示例 -> ID 为 'EAN456' 的产品 图片目录下属于本产品的图片 -> EAN456.jpg, EAN456-1.jpg, EAN456-2.jpg

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

我知道你可以在 java 中循环目录并检查每个文件名以查看文件名中是否有 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 ...
        }            
    }    
}

任何人都可以帮助我找到好的方法吗? 谢谢!

您可以像这样使用 FilenameFilter 获取名称以产品 ID 开头的文件:

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

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

使用 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)