最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Java編寫一個文件批量重命名工具

 更新時間:2024年12月30日 08:30:00   作者:望佑  
這篇文章主要為大家詳細介紹了如何使用Java編寫一個文件批量重命名工具,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

背景

在開發(fā)移動應(yīng)用時,UI設(shè)計通常會提供不同分辨率的圖片資源來適配多種屏幕尺寸。例如,在一個特定的應(yīng)用場景中,seekbar范圍0-64對應(yīng)64張圖片,用于滑動切換不同的顏色背景。設(shè)計師提供了"xhdpi", "xxhdpi", "xxxhdpi"三種不同尺寸的圖片集,總共192張圖片。手動為這些圖片添加前綴或進行其他格式化操作既耗時又容易出錯。因此,為了提高效率并減少人為錯誤,這里編寫了一個Java工具類FileRenamer,用以自動化這個過程。

處理

1. 文件夾檢查與遍歷

首先,FileRenamer類定義了新文件名的前綴和源文件夾路徑。然后通過rename()方法獲取指定路徑下的文件夾對象,并驗證其有效性。接下來,它遍歷預(yù)設(shè)的子文件夾(如"xhdpi", "xxhdpi", "xxxhdpi"),對每個存在的子文件夾調(diào)用processSubFolder()方法進行進一步處理。

2. 批量重命名

processSubFolder()方法中,程序篩選出所有.png文件,并使用正則表達式匹配文件名中的數(shù)字和顏色值。根據(jù)匹配結(jié)果構(gòu)造新的文件名,將原有的數(shù)字部分保留下來,同時將文件名更改為帶有指定前綴的形式,如從0_color_ffff00.pngic_wangyou_color0_ffffff.png。成功重命名后,程序會輸出確認信息;若失敗,則記錄下錯誤。

3. 輸出配置代碼片段

最后,outputCodeSnippet()方法負責生成一段可以復(fù)制粘貼到工程配置中的代碼片段。該方法先過濾并排序符合新前綴的所有PNG文件,然后構(gòu)造包含這些文件引用的字符串。此外,它還會列出未被包含的文件,以便開發(fā)者檢查是否有遺漏。

完整代碼

通過上述步驟,FileRenamer實現(xiàn)了批量重命名圖片文件的功能,并自動生成了配置代碼片段,極大地簡化了資源管理的工作量。以下是該工具類的完整源碼:

package com.wang.you.util;

import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class FileRenamer {

    private static final String NEW_PREFIX = "ic_wangyou_color";
    private static final String FOLDER_PATH = "/storage/emulated/0/wangyou";

    public static void rename() {
        File folder = new File(FOLDER_PATH);
        if (!folder.exists() || !folder.isDirectory()) {
            System.out.println("指定的路徑不是一個有效的文件夾!");
            return;
        }

        String[] subFolders = {"xhdpi", "xxhdpi", "xxxhdpi"};

        for (String subFolderName : subFolders) {
            File subFolder = new File(folder, subFolderName);
            if (subFolder.exists() && subFolder.isDirectory()) {
                processSubFolder(subFolder);
            } else {
                System.out.println("子文件夾 " + subFolderName + " 不存在或不是一個有效的文件夾!");
            }
        }
    }

    private static void processSubFolder(File subFolder) {
        File[] files = subFolder.listFiles((dir, name) -> name.toLowerCase().endsWith(".png"));
        if (files == null || files.length == 0) {
            System.out.println("在文件夾 " + subFolder.getName() + " 中沒有找到任何 .png 文件!");
            return;
        }

        for (File oldFile : files) {
            String oldFileName = oldFile.getName();
            Pattern pattern = Pattern.compile("(\\d+)_(\\w+\\.png)");
            Matcher matcher = pattern.matcher(oldFileName);

            if (matcher.matches()) {
                String numberPart = matcher.group(1);
                String colorValueWithExt = matcher.group(2);
                String colorValue = colorValueWithExt.split("\\.")[0];

                String newFileName = NEW_PREFIX + numberPart + "_" + colorValue + ".png";
                File newFile = new File(subFolder, newFileName);

                if (oldFile.renameTo(newFile)) {
                    System.out.println("Renamed: " + oldFileName + " -> " + newFileName);
                } else {
                    System.out.println("Failed to rename: " + oldFileName);
                }
            } else {
                System.out.println("Invalid file name format: " + oldFileName);
            }
        }

        outputCodeSnippet(subFolder);
    }

    private static void outputCodeSnippet(File folder) {
        Pattern pattern = Pattern.compile("(?<=color)(\\d+)(?=_)");

        List<File> allPngFiles = Arrays.stream(folder.listFiles())
                .filter(file -> file.getName().toLowerCase().endsWith(".png"))
                .collect(Collectors.toList());

        List<File> renamedFiles = allPngFiles.stream()
                .filter(file -> file.getName().startsWith(NEW_PREFIX))
                .sorted((f1, f2) -> {
                    Matcher m1 = pattern.matcher(f1.getName());
                    Matcher m2 = pattern.matcher(f2.getName());
                    if (m1.find() && m2.find()) {
                        return Integer.compare(Integer.parseInt(m1.group()), Integer.parseInt(m2.group()));
                    }
                    return 0;
                })
                .collect(Collectors.toList());

        System.out.println("準備輸出字符串renamedFiles: " + renamedFiles.size());

        StringBuilder outputString = new StringBuilder("private final int[] wangyou_colorArr_" + folder.getName() + " = new int[]{\n");

        for (File file : renamedFiles) {
            String fileNameWithoutExtension = file.getName().replaceFirst("[.][^.]+$", "");
            outputString.append("            R.mipmap.")
                    .append(fileNameWithoutExtension)
                    .append(",\n");
        }

        if (outputString.toString().endsWith(",\n")) {
            outputString.setLength(outputString.length() - 2);
        }
        outputString.append("\n};");

        System.out.println(outputString.toString());

        List<File> unmatchedFiles = allPngFiles.stream()
                .filter(file -> !file.getName().startsWith(NEW_PREFIX))
                .collect(Collectors.toList());

        if (!unmatchedFiles.isEmpty()) {
            System.out.println("以下文件未被包含:");
            unmatchedFiles.forEach(file -> System.out.println("    " + file.getName()));
        }
    }
}

這段代碼不僅解決了大批量圖片文件的重命名問題,還自動生成了對應(yīng)的資源數(shù)組,使得能夠輕松地在項目中集成這些資源。這里只是一個示例,當然啦,實際使用要根據(jù)不同的文件名稱去處理,照搬肯定是不行的

到此這篇關(guān)于使用Java編寫一個文件批量重命名工具的文章就介紹到這了,更多相關(guān)Java文件批量重命名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java文件類型校驗之Apache Tika詳解

    Java文件類型校驗之Apache Tika詳解

    本文介紹了使用Apache Tika庫來判斷文件類型的方法,Tika可判斷多種文件類型,包括doc、ppt、xls等,通過引入Tika的Maven依賴,可以輕松轉(zhuǎn)換MultipartFile為File類,從而獲取文件的Mime類型,最后列出了常見文件類型的Mime類型,方便使用
    2026-03-03
  • maven下載依賴失敗問題及解決

    maven下載依賴失敗問題及解決

    這篇文章主要介紹了maven下載依賴失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • java實現(xiàn)飛機大戰(zhàn)案例詳解

    java實現(xiàn)飛機大戰(zhàn)案例詳解

    這篇文章主要為大家詳細介紹了java實現(xiàn)飛機大戰(zhàn)案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • java HashMap詳解及實例代碼

    java HashMap詳解及實例代碼

    這篇文章主要介紹了java HashMap詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Java設(shè)計模式之享元模式

    Java設(shè)計模式之享元模式

    這篇文章主要為大家詳細介紹了Java設(shè)計模式之享元模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • java時間格式的簡單整理

    java時間格式的簡單整理

    這篇文章主要介紹了java時間格式的簡單整理,文中通過示例介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考一下
    2019-06-06
  • Java中實體與Map之間的相互轉(zhuǎn)換代碼示例

    Java中實體與Map之間的相互轉(zhuǎn)換代碼示例

    生活中經(jīng)常用到map數(shù)據(jù)與實體類的轉(zhuǎn)換,下面這篇文章主要給大家介紹了關(guān)于Java中實體與Map之間相互轉(zhuǎn)換的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • Spring?Boot?結(jié)合?WxJava?實現(xiàn)文章上傳微信公眾號草稿箱與群發(fā)

    Spring?Boot?結(jié)合?WxJava?實現(xiàn)文章上傳微信公眾號草稿箱與群發(fā)

    本文將詳細介紹如何使用SpringBoot框架結(jié)合WxJava開發(fā)工具包,實現(xiàn)文章上傳到微信公眾號草稿箱以及群發(fā)功能,感興趣的朋友一起看看吧
    2025-07-07
  • RocketMQ-延遲消息的處理流程介紹

    RocketMQ-延遲消息的處理流程介紹

    這篇文章主要介紹了RocketMQ-延遲消息的處理流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot事務(wù)失效的七種場景分析及解決方案

    SpringBoot事務(wù)失效的七種場景分析及解決方案

    Spring Boot 中的事務(wù)失效通常是由于代理機制、異常處理、傳播行為配置不當?shù)仍蛞鸬?通過合理配置和排查,可以有效避免事務(wù)失效問題,所以本文給大家總結(jié)了SpringBoot事務(wù)失效的七種場景分析及解決方案,需要的朋友可以參考下
    2025-05-05

最新評論

邵东县| 盐池县| 抚远县| 濮阳县| 班戈县| 南安市| 岳普湖县| 疏附县| 大方县| 温州市| 瑞丽市| 缙云县| 河源市| 南木林县| 安塞县| 高唐县| 政和县| 洞头县| 洪洞县| 东光县| 昌黎县| 永平县| 广水市| 建宁县| 平定县| 两当县| 三原县| 贵溪市| 奎屯市| 江川县| 辛集市| 同心县| 高州市| 交口县| 天门市| 兰西县| 阿拉善右旗| 吴桥县| 峡江县| 文登市| 察隅县|