Java根据文件名前缀自动分组图片文件
需求:一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理。需通过代码自动归类整理。根据文件名前缀将图片文件自动分组,为每一组创建一个文件夹来归档。
背景
一批图片文件,命名格式如下:
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) {// 提取前缀部分作为 keyString 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_20241021A_20241021-1.jpgA_20241021-2.jpg
文件夹: A_20241022A_20241022-1.jpg
文件夹: A_20241023A_20241023-1.jpg
分组成功,为每组生成了“文件夹名”。