需求
一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理。需通过代码自动归类整理。根据文件名前缀将图片文件自动分组,为每一组创建一个文件夹来归档。
背景
一批图片文件,命名格式如下:
a_20241021-1.jpg
a_20241021-2.jpg
a_20241022-1.png
a_20241023-1.xml
-1, -2 之前的部分是一致的。前缀相同的文件属于同一组。根据这个前缀,把它们分到各自的“文件夹”中。
分析思路
提取文件名前缀:以 -数字 为分隔,去掉后缀名,取前半部分作为分组依据。
使用 map 存储分组结果:key 是前缀,value 是对应的文件列表。
输出或移动到对应的文件夹中。
实现代码
下面是完整的示例代码,重点是如何提取前缀并进行分组:
import java.util.*;
public class filegrouper {
public static void main(string[] args) {
// 示例文件名列表
list<string> filenames = arrays.aslist(
"a_20241021-1.jpg",
"a_20241021-2.jpg",
"a_20241022-1.jpg",
"a_20241023-1.jpg"
);
// 存储分组后的文件名
map<string, list<string>> groupedfiles = new hashmap<>();
for (string filename : filenames) {
// 提取前缀部分作为 key
string prefix = getprefix(filename);
// 添加到对应的分组
groupedfiles.computeifabsent(prefix, k -> new arraylist<>()).add(filename);
}
// 输出分组结果
for (map.entry<string, list<string>> entry : groupedfiles.entryset()) {
system.out.println("文件夹: " + entry.getkey());
for (string file : entry.getvalue()) {
system.out.println(" " + file);
}
}
}
/**
* 获取文件名前缀(去掉 `-数字` 和扩展名)
*/
private static string getprefix(string filename) {
int lastdashindex = filename.lastindexof('-');
if (lastdashindex != -1) {
return filename.substring(0, lastdashindex);
}
return filename;
}
}
输出结果
运行后,你会得到如下输出:
文件夹: a_20241021
a_20241021-1.jpg
a_20241021-2.jpg
文件夹: a_20241022
a_20241022-1.jpg
文件夹: a_20241023
a_20241023-1.jpg
分组成功,为每组生成了“文件夹名”。
知识扩展
java 根据文件名前缀找文件
在java中,我们可以通过文件名的前缀来查找文件。这个过程主要分为以下几个步骤:读取文件目录、筛选文件名、匹配前缀、找到目标文件。
详细步骤
步骤1:读取文件目录
首先,我们需要获取目标文件夹中的所有文件名列表。
// 指定目标文件夹路径
file folder = new file("path/to/folder");
// 获取目标文件夹中的所有文件
file[] listoffiles = folder.listfiles();
步骤2:筛选文件名
接下来,我们需要筛选出目标文件名。
list<string> filenames = new arraylist<>();
for (file file : listoffiles) {
if (file.isfile()) {
filenames.add(file.getname());
}
}
步骤3:匹配前缀
然后,我们需要匹配文件名前缀,找到目标文件。
string targetprefix = "prefix";
string targetfile = null;
for (string filename : filenames) {
if (filename.startswith(targetprefix)) {
targetfile = filename;
break;
}
}
步骤4:找到目标文件
最后,我们可以根据目标文件名找到目标文件。
file file = new file(folder.getpath() + file.separator + targetfile); // 进行后续操作,比如读取文件内容
到此这篇关于java如何根据文件名前缀自动分组图片文件的文章就介绍到这了,更多相关java自动分组图片内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论