基于Java實現(xiàn)遍歷文件目錄并去除中文文件名
一、原始需求
需要遍歷文件目錄及其子目錄,找出包含中文字符的文件名,將中文字符去除。
二、maven依賴
pom.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/測試文件)
import java.io.File;
import java.util.List;
import java.util.stream.Collectors;
import org.apache.commons.io.FileUtils;
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(), "yyyyMMdd") + destName;
}
// 文件前后綴
String prefix = StringUtils.substringBeforeLast(destName, ".");
String suffix = StringUtils.substring(destName, prefix.length());
// 處理重名
int index = 1;
File destFile = new File(file.getParent() + File.separator + destName);
while (destFile.exists())
{
destName = String.format("%s_%s%s", prefix, index++, suffix);
destFile = new File(file.getParent() + File.separator + destName);
}
Boolean result = file.renameTo(destFile);
log.info("{} ---> {}, ====== result: {}", file.getAbsolutePath(), destFile.getAbsolutePath(), result);
}
});
}
}
四、運行結(jié)果
2024-03-15 19:13:37.983 [main] INFO com.fly.files.FileTest - E:\test\a\b\_內(nèi)容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
到此這篇關(guān)于基于Java實現(xiàn)遍歷文件目錄并去除中文文件名的文章就介紹到這了,更多相關(guān)Java遍歷文件目錄內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mybatis-generator 修改表結(jié)構(gòu)后實體不更新問題及解決方法
本文主要介紹了如何在MyBatis Generator中修改表結(jié)構(gòu)后更新實體類的問題,并提供了解決方案,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-04-04
java讀取resources文件詳解及實現(xiàn)代碼
這篇文章主要介紹了java讀取resources文件詳解及實現(xiàn)代碼的相關(guān)資料,在開發(fā)項目的時候經(jīng)常會遇到讀取文件夾里面的內(nèi)容,需要的朋友可以參考下2017-07-07
Java 8 Stream.distinct() 列表去重的操作
這篇文章主要介紹了Java 8 Stream.distinct() 列表去重的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
feign調(diào)用中文參數(shù)被encode編譯的問題
這篇文章主要介紹了feign調(diào)用中文參數(shù)被encode編譯的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
微信開發(fā)準備第二步 springmvc mybatis項目結(jié)構(gòu)搭建
這篇文章主要為大家詳細介紹了微信開發(fā)準備第二步,springmvc和mybatis項目結(jié)構(gòu)的搭建,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04
java WebSocket客戶端斷線重連的實現(xiàn)方法
在工作中是否會遇到實用websocket客戶端連接服務(wù)端的時候,網(wǎng)絡(luò)波動,服務(wù)端斷連的情況,本文可以直接使用的斷線重連,感興趣的可以了解一下2021-10-10

