获取目录中与文件名中的特定字符串匹配的图像文件名列表
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)
我有一个包含 +- 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)