java遍历文件目录去除中文文件名

文章目录

一、原始需求

需要遍历文件目录及其子目录,找出包含中文字符的文件名,将中文字符去除。

二、maven依赖

pom.xml

xml 复制代码
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.10</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.5</version>
		</dependency>
		
        <!--Test-->
		<dependency>
			<groupId>org.junit.jupiter</groupId>
			<artifactId>junit-jupiter-api</artifactId>
			<version>5.5.2</version>
			<scope>test</scope>
		</dependency>

三、核心代码

注意处理:

  • 中文路径(如:E:/test/a/测试/b)
  • 全中文文件(如:E:/test/a/测试文本.txt)
  • 无后缀文件(如:E:/test/a/b/测试文件)
java 复制代码
import java.io.File;
import java.util.List;
import java.util.stream.Collectors;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.junit.jupiter.api.Test;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class FileTest
{
    /**
     * 中文正则
     */
    private String REGEX_CHINESE = "[\u4e00-\u9fa5]";
    
    /**
     * 移除中文文件名
     */
    @Test
    public void removeChineseTest()
    {
        File dir = new File("E:\\test");
        List<File> files = FileUtils.listFiles(dir, null, true).stream().filter(f -> f.isFile()).collect(Collectors.toList());
        files.stream().forEach(file -> {
            String srcName = file.getName();
            String destName = RegExUtils.removePattern(srcName, REGEX_CHINESE);
            if (!StringUtils.equals(srcName, destName))
            {
                // 处理全中文和无后缀文件
                if (StringUtils.startsWith(destName, ".") || StringUtils.isBlank(destName))
                {
                    // 随机数防止重名
                    destName = DateFormatUtils.format(System.currentTimeMillis(), "MMddHHmmssSSS_") + RandomStringUtils.randomAlphabetic(5) + destName;
                }
                File destFile = new File(file.getParent() + File.separator + destName);
                Boolean result = file.renameTo(destFile);
                log.info("{} ---> {}, ====== result: {}", file.getAbsolutePath(), destFile.getAbsolutePath(), result);
            }
        });
    }
}

四、运行结果

bash 复制代码
2024-03-15 19:13:37.983 [main] INFO  com.fly.files.FileTest - E:\test\a\b\_内容20230676190031.jpg ---> E:\test\a\b\_20230676190031.jpg, ====== result: true
2024-03-15 19:13:37.986 [main] INFO  com.fly.files.FileTest - E:\test\a\文件_20230676190035.jpg ---> E:\test\a\_20230676190035.jpg, ====== result: true
2024-03-15 19:13:37.987 [main] INFO  com.fly.files.FileTest - E:\test\中文_20230676154641.jpg ---> E:\test\_20230676154641.jpg, ====== result: true
2024-03-15 19:13:37.988 [main] INFO  com.fly.files.FileTest - E:\test\哈哈_20230676154717.png ---> E:\test\_20230676154717.png, ====== result: true
2024-03-15 19:13:37.988 [main] INFO  com.fly.files.FileTest - E:\test\嗯嗯_20230676190039.jpg ---> E:\test\_20230676190039.jpg, ====== result: true
2024-03-15 19:13:37.989 [main] INFO  com.fly.files.FileTest - E:\test\测试_20230676154623.jpg ---> E:\test\_20230676154623.jpg, ====== result: true
2024-03-15 19:13:37.989 [main] INFO  com.fly.files.FileTest - E:\test\维修_20230676155003.jpg ---> E:\test\_20230676155003.jpg, ====== result: true

有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

相关推荐
Cosolar2 小时前
极简智库:快速搭建你的开源项目教程阅读平台,让 docs/ 目录被更多人看见
java·架构·github
nice_lcj5202 小时前
【从零理解 Spring AI · 16】Agent 与工作流:什么该写死,什么该让模型决定
java·人工智能·后端·spring ai·ai应用开发
北京云帆互联科技2 小时前
云帆培训考试系统更新说明:v9.3.0
java·学习
学长毕设3 小时前
基于SpringBoot的景点管理系统-附源码
java·spring boot·后端
sxlishaobin4 小时前
Maven Setting详解
java·学习·maven
知守观4 小时前
一个方法两个触发口:反编译 XXL-Job 后,我看清了 inner/job 子包的裸奔现状
java·spring boot·微服务
用户3126874877204 小时前
CompletableFuture 链式编排:异步编程的优雅解法
java
瑞雪兆丰年兮5 小时前
JavaWeb-day14-SpringBootWeb原理篇
java·开发语言·spring boot·spring·bean·mybatis·javaweb
神仙别闹5 小时前
基于 Java GUI 贪心策略直接搜索算法和极大极小博弈树算法的智能人机博弈五子棋游戏
java·毕业设计·gui·贪心策略·极大极小博弈树
Flynn Liang6 小时前
RAG 评估体系:黄金集、检索指标与 LLM-as-Judge 落地
java·langchain·rag·评估·langchain4j·检索指标