Java如何根據(jù)文件名前綴自動(dòng)分組圖片文件
需求
一大堆文件(比如圖片)堆在一個(gè)目錄下,它們的命名規(guī)則遵循一定的格式,混在一起很難管理。需通過(guò)代碼自動(dòng)歸類(lèi)整理。根據(jù)文件名前綴將圖片文件自動(dòng)分組,為每一組創(chuàng)建一個(gè)文件夾來(lái)歸檔。
背景
一批圖片文件,命名格式如下:
A_20241021-1.jpg
A_20241021-2.jpg
A_20241022-1.png
A_20241023-1.xml
-1, -2 之前的部分是一致的。前綴相同的文件屬于同一組。根據(jù)這個(gè)前綴,把它們分到各自的“文件夾”中。
分析思路
提取文件名前綴:以 -數(shù)字 為分隔,去掉后綴名,取前半部分作為分組依據(jù)。
使用 Map 存儲(chǔ)分組結(jié)果:key 是前綴,value 是對(duì)應(yīng)的文件列表。
輸出或移動(dòng)到對(duì)應(yīng)的文件夾中。
實(shí)現(xiàn)代碼
下面是完整的示例代碼,重點(diǎn)是如何提取前綴并進(jìn)行分組:
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"
);
// 存儲(chǔ)分組后的文件名
Map<String, List<String>> groupedFiles = new HashMap<>();
for (String fileName : fileNames) {
// 提取前綴部分作為 key
String prefix = getPrefix(fileName);
// 添加到對(duì)應(yīng)的分組
groupedFiles.computeIfAbsent(prefix, k -> new ArrayList<>()).add(fileName);
}
// 輸出分組結(jié)果
for (Map.Entry<String, List<String>> entry : groupedFiles.entrySet()) {
System.out.println("文件夾: " + entry.getKey());
for (String file : entry.getValue()) {
System.out.println(" " + file);
}
}
}
/**
* 獲取文件名前綴(去掉 `-數(shù)字` 和擴(kuò)展名)
*/
private static String getPrefix(String fileName) {
int lastDashIndex = fileName.lastIndexOf('-');
if (lastDashIndex != -1) {
return fileName.substring(0, lastDashIndex);
}
return fileName;
}
}
輸出結(jié)果
運(yùn)行后,你會(huì)得到如下輸出:
文件夾: A_20241021
A_20241021-1.jpg
A_20241021-2.jpg
文件夾: A_20241022
A_20241022-1.jpg
文件夾: A_20241023
A_20241023-1.jpg
分組成功,為每組生成了“文件夾名”。
知識(shí)擴(kuò)展
Java 根據(jù)文件名前綴找文件
在Java中,我們可以通過(guò)文件名的前綴來(lái)查找文件。這個(gè)過(guò)程主要分為以下幾個(gè)步驟:讀取文件目錄、篩選文件名、匹配前綴、找到目標(biāo)文件。
詳細(xì)步驟
步驟1:讀取文件目錄
首先,我們需要獲取目標(biāo)文件夾中的所有文件名列表。
// 指定目標(biāo)文件夾路徑
File folder = new File("path/to/folder");
// 獲取目標(biāo)文件夾中的所有文件
File[] listOfFiles = folder.listFiles();
步驟2:篩選文件名
接下來(lái),我們需要篩選出目標(biāo)文件名。
List<String> fileNames = new ArrayList<>();
for (File file : listOfFiles) {
if (file.isFile()) {
fileNames.add(file.getName());
}
}
步驟3:匹配前綴
然后,我們需要匹配文件名前綴,找到目標(biāo)文件。
String targetPrefix = "prefix";
String targetFile = null;
for (String fileName : fileNames) {
if (fileName.startsWith(targetPrefix)) {
targetFile = fileName;
break;
}
}
步驟4:找到目標(biāo)文件
最后,我們可以根據(jù)目標(biāo)文件名找到目標(biāo)文件。
File file = new File(folder.getPath() + File.separator + targetFile); // 進(jìn)行后續(xù)操作,比如讀取文件內(nèi)容
到此這篇關(guān)于Java如何根據(jù)文件名前綴自動(dòng)分組圖片文件的文章就介紹到這了,更多相關(guān)Java自動(dòng)分組圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java編程實(shí)現(xiàn)獲取服務(wù)器IP地址及MAC地址的方法
這篇文章主要介紹了java編程實(shí)現(xiàn)獲取機(jī)器IP地址及MAC地址的方法,實(shí)例分析了Java分別針對(duì)單網(wǎng)卡及多網(wǎng)卡的情況下獲取服務(wù)器IP地址與MAC地址的相關(guān)技巧,需要的朋友可以參考下2015-11-11
SpringMVC打印請(qǐng)求參數(shù)和響應(yīng)數(shù)據(jù)最優(yōu)方案
項(xiàng)目中經(jīng)常需要打印http請(qǐng)求的參數(shù)和響應(yīng)數(shù)據(jù),本文給大家講解如何在SpringMVC打印請(qǐng)求參數(shù)和響應(yīng)數(shù)據(jù)最優(yōu)方案,感興趣的朋友跟隨小編一起看看吧2023-07-07
springboot下ueditor上傳功能的實(shí)現(xiàn)及遇到的問(wèn)題
這篇文章主要介紹了springboot下ueditor上傳功能的實(shí)現(xiàn)及遇到的問(wèn)題,本文分步驟通過(guò)實(shí)例截圖給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
java實(shí)現(xiàn)圖書(shū)檢索系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖書(shū)檢索系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
Java通過(guò)JNI 調(diào)用動(dòng)態(tài)鏈接庫(kù)DLL操作
這篇文章主要介紹了Java通過(guò)JNI 調(diào)用動(dòng)態(tài)鏈接庫(kù)DLL操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11
Spring事件監(jiān)聽(tīng)機(jī)制ApplicationEvent方式
這篇文章主要介紹了Spring事件監(jiān)聽(tīng)機(jī)制ApplicationEvent方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
Java實(shí)現(xiàn)按字節(jié)長(zhǎng)度截取字符串
在Java中,由于字符串可能包含多字節(jié)字符,直接按字節(jié)長(zhǎng)度截取可能會(huì)導(dǎo)致亂碼或截取不準(zhǔn)確的問(wèn)題,下面我們就來(lái)看看幾種按字節(jié)長(zhǎng)度截取字符串的方法吧2025-05-05
關(guān)于mybatis遇到Integer類(lèi)型的參數(shù)時(shí)動(dòng)態(tài)sql需要注意條件
這篇文章主要介紹了關(guān)于mybatis遇到Integer類(lèi)型的參數(shù)時(shí)動(dòng)態(tài)sql需要注意條件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03

