Java如何根據(jù)文件名前綴自動分組圖片文件
需求
一大堆文件(比如圖片)堆在一個目錄下,它們的命名規(guī)則遵循一定的格式,混在一起很難管理。需通過代碼自動歸類整理。根據(jù)文件名前綴將圖片文件自動分組,為每一組創(chuàng)建一個文件夾來歸檔。
背景
一批圖片文件,命名格式如下:
A_20241021-1.jpg
A_20241021-2.jpg
A_20241022-1.png
A_20241023-1.xml
-1, -2 之前的部分是一致的。前綴相同的文件屬于同一組。根據(jù)這個前綴,把它們分到各自的“文件夾”中。
分析思路
提取文件名前綴:以 -數(shù)字 為分隔,去掉后綴名,取前半部分作為分組依據(jù)。
使用 Map 存儲分組結(jié)果:key 是前綴,value 是對應(yīng)的文件列表。
輸出或移動到對應(yīng)的文件夾中。
實現(xià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" ); // 存儲分組后的文件名 Map<String, List<String>> groupedFiles = new HashMap<>(); for (String fileName : fileNames) { // 提取前綴部分作為 key String prefix = getPrefix(fileName); // 添加到對應(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ù)字` 和擴展名) */ private static String getPrefix(String fileName) { int lastDashIndex = fileName.lastIndexOf('-'); if (lastDashIndex != -1) { return fileName.substring(0, lastDashIndex); } return fileName; } }
輸出結(jié)果
運行后,你會得到如下輸出:
文件夾: A_20241021
A_20241021-1.jpg
A_20241021-2.jpg
文件夾: A_20241022
A_20241022-1.jpg
文件夾: A_20241023
A_20241023-1.jpg
分組成功,為每組生成了“文件夾名”。
知識擴展
Java 根據(jù)文件名前綴找文件
在Java中,我們可以通過文件名的前綴來查找文件。這個過程主要分為以下幾個步驟:讀取文件目錄、篩選文件名、匹配前綴、找到目標(biāo)文件。
詳細(xì)步驟
步驟1:讀取文件目錄
首先,我們需要獲取目標(biāo)文件夾中的所有文件名列表。
// 指定目標(biāo)文件夾路徑 File folder = new File("path/to/folder"); // 獲取目標(biāo)文件夾中的所有文件 File[] listOfFiles = folder.listFiles();
步驟2:篩選文件名
接下來,我們需要篩選出目標(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ù)文件名前綴自動分組圖片文件的文章就介紹到這了,更多相關(guān)Java自動分組圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java中將科學(xué)計數(shù)法轉(zhuǎn)換普通計數(shù)法的簡單方法
下面小編就為大家?guī)硪黄猨ava中將科學(xué)計數(shù)法轉(zhuǎn)換普通計數(shù)法的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12使用Sentinel實現(xiàn)流控和服務(wù)降級的代碼示例
Sentinel是面向分布式、多語言異構(gòu)化服務(wù)架構(gòu)的流量治理組件,本文將詳細(xì)為大家介紹如何使用Sentinel實現(xiàn)流控和服務(wù)降級,文中有相關(guān)的代碼示例,需要的朋友可以參考下2023-05-05解決swaggerUI頁面沒有顯示Controller方法的坑
這篇文章主要介紹了解決swaggerUI頁面沒有顯示Controller方法的坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06Spring MVC配置雙數(shù)據(jù)源實現(xiàn)一個java項目同時連接兩個數(shù)據(jù)庫的方法
這篇文章主要給大家介紹了關(guān)于Spring MVC如何配置雙數(shù)據(jù)源實現(xiàn)一個java項目同時連接兩個數(shù)據(jù)庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。2017-05-05Java正則表達(dá)式處理特殊字符轉(zhuǎn)義的方法
由于正則表達(dá)式定了一些特殊字符,而有時候需要對這些特殊字符進(jìn)行匹配的話就需要進(jìn)行轉(zhuǎn)義了,下面這篇文章主要給大家介紹了Java正則表達(dá)式處理特殊字符轉(zhuǎn)義的方法,需要的朋友可以參考借鑒,下面來一起看看吧。2017-01-01如何把idea中的項目導(dǎo)入github倉庫中(圖文詳解)
這篇文章主要介紹了如何把idea中的項目導(dǎo)入github倉庫中,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07