文章目录
一、原始需求
需要遍历文件目录及其子目录,找出包含中文字符的文件名,将中文字符去除。
二、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-