我的目录是+ - 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 ...
}
}
}
有人可以帮我一个好方法吗? 谢谢!
答案 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)