首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實現酷狗音樂緩存文件轉 MP3 並自動重命名

     編輯:Java 相關知識

背景

酷狗音樂的緩存文件(.kgtemp)實際上已是完整的 MP3 數據,只是文件名經過 MD5 重命名。同時緩存目錄下還有對應的歌詞文件(.krc),文件名包含歌曲名與 MD5。本文提供工具類,自動匹配並將緩存文件轉為「歌曲名.mp3」。

核心邏輯

  1. 掃描緩存目錄,提取 .kgtemp 文件的 MD5(文件名去掉後綴)。
  2. 掃描歌詞目錄,解析 .krc 文件名:歌曲名-MD5.krc,提取歌曲名與 MD5。
  3. 以 MD5 為鍵匹配,將 .kgtemp 重命名為 歌曲名.mp3。

完整工具類

package com.zhou.run;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

public class KugouTempFileToMp3AndModifyNameToTrueName {
    public static final String KGTEMP = ".kgtemp";
    public static final String KRC = "krc";

    /** 單文件測試用 */
    public void change(String tempPath, String krcPath) {
        File temp = new File(tempPath);
        File krc = new File(krcPath);
        if (!temp.exists() || !temp.getName().endsWith(KGTEMP) || !krc.exists()) return;

        String tempMd5 = temp.getName().substring(0, temp.getName().lastIndexOf(KGTEMP));
        String krcName = krc.getName();
        String krcMd5 = krcName.substring(krcName.lastIndexOf("-") + 1, krcName.lastIndexOf(KRC) - 1);
        String mp3Name = krcName.substring(0, krcName.lastIndexOf("-"));

        if (krcMd5.equals(tempMd5)) {
            String dir = temp.getParent();
            File mp3File = new File(dir + File.separator + mp3Name + ".mp3");
            temp.renameTo(mp3File);
        }
    }

    /** 批量處理目錄(推薦使用) */
    public void changeByDir(String tempDir, String krcDir) {
        Map<String, File> tempMap = fileMd5Map(tempDir);
        Map<String, String> mp3NameMap = krcNameMd5Map(krcDir);

        for (String md5 : tempMap.keySet()) {
            File tempFile = tempMap.get(md5);
            String mp3Name = mp3NameMap.get(md5);
            if (tempFile.exists() && mp3Name != null) {
                File mp3File = new File(tempFile.getParent() + File.separator + mp3Name + ".mp3");
                if (tempFile.renameTo(mp3File)) {
                    System.out.println(tempFile.getName() + " -> " + mp3File.getName() + " SUCCESS");
                }
            }
        }
    }

    private Map<String, File> fileMd5Map(String path) {
        Map<String, File> map = new HashMap<>();
        File dir = new File(path);
        if (dir.isDirectory()) {
            for (File f : dir.listFiles()) {
                if (f.isFile() && f.getName().endsWith(KGTEMP)) {
                    String md5 = f.getName().substring(0, f.getName().lastIndexOf(KGTEMP));
                    map.put(md5, f);
                }
            }
        }
        return map;
    }

    private Map<String, String> krcNameMd5Map(String path) {
        Map<String, String> map = new HashMap<>();
        File dir = new File(path);
        if (dir.isDirectory()) {
            for (File f : dir.listFiles()) {
                if (f.isFile() && f.getName().endsWith(KRC) && f.getName().contains("-")) {
                    String name = f.getName();
                    String md5 = name.substring(name.lastIndexOf("-") + 1, name.lastIndexOf(KRC) - 1);
                    String mp3Name = name.substring(0, name.lastIndexOf("-"));
                    map.put(md5, mp3Name);
                }
            }
        }
        return map;
    }

    public static void main(String[] args) {
        KugouTempFileToMp3AndModifyNameToTrueName tool = new KugouTempFileToMp3AndModifyNameToTrueName();
        tool.changeByDir("D:/KuGou/mp3", "D:/KuGou/Lyric");
    }
}

使用說明

  1. 修改 main 方法中的緩存目錄與歌詞目錄路徑。
  2. 運行程序,自動完成批量轉換與重命名。
  3. 程序會打印每個文件的轉換結果。

注意事項

  • 僅供個人學習研究使用,請尊重版權。
  • 路徑分隔符建議使用 File.separator 以兼容跨平台。
  • 若歌詞文件命名規則變更,需調整解析邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved