Java如何根据文件名前缀自动分组图片文件

 更新时间:2025年05月12日 15:20:35   作者:颇有几分姿色  
一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用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) {
            // 提取前缀部分作为 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自动分组图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java编程实现获取服务器IP地址及MAC地址的方法

    java编程实现获取服务器IP地址及MAC地址的方法

    这篇文章主要介绍了java编程实现获取机器IP地址及MAC地址的方法,实例分析了Java分别针对单网卡及多网卡的情况下获取服务器IP地址与MAC地址的相关技巧,需要的朋友可以参考下
    2015-11-11
  • SpringMVC打印请求参数和响应数据最优方案

    SpringMVC打印请求参数和响应数据最优方案

    项目中经常需要打印http请求的参数和响应数据,本文给大家讲解如何在SpringMVC打印请求参数和响应数据最优方案,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • springboot下ueditor上传功能的实现及遇到的问题

    springboot下ueditor上传功能的实现及遇到的问题

    这篇文章主要介绍了springboot下ueditor上传功能的实现及遇到的问题,本文分步骤通过实例截图给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • java实现图书检索系统

    java实现图书检索系统

    这篇文章主要为大家详细介绍了java实现图书检索系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Java通过JNI 调用动态链接库DLL操作

    Java通过JNI 调用动态链接库DLL操作

    这篇文章主要介绍了Java通过JNI 调用动态链接库DLL操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Spring事件监听机制ApplicationEvent方式

    Spring事件监听机制ApplicationEvent方式

    这篇文章主要介绍了Spring事件监听机制ApplicationEvent方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java实现按字节长度截取字符串

    Java实现按字节长度截取字符串

    在Java中,由于字符串可能包含多字节字符,直接按字节长度截取可能会导致乱码或截取不准确的问题,下面我们就来看看几种按字节长度截取字符串的方法吧
    2025-05-05
  • Mybatis使用distinct问题及处理

    Mybatis使用distinct问题及处理

    Mybatis使用distinct查询时,插件自动生成的sql可能少去掉一行,导致查询不到期望的结果,修复方法是在生成的sql中去掉"Base_Column_List"
    2025-12-12
  • SpringMVC上传图片与访问

    SpringMVC上传图片与访问

    这篇文章主要介绍了SpringMVC上传图片与访问的相关资料,需要的朋友可以参考下
    2016-01-01
  • 关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    关于mybatis遇到Integer类型的参数时动态sql需要注意条件

    这篇文章主要介绍了关于mybatis遇到Integer类型的参数时动态sql需要注意条件,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03

最新评论