java實(shí)現(xiàn)酷狗音樂臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法
本文實(shí)例講述了java實(shí)現(xiàn)酷狗音樂臨時(shí)緩存文件轉(zhuǎn)換為MP3文件的方法。分享給大家供大家參考,具體如下:
酷狗臨時(shí)緩存文件,其實(shí)已經(jīng)是吧MP3文件下載好了,只是名字看上去好像是通過md5算法重命名的。
酷狗在緩存文件的時(shí)候會(huì)同時(shí)緩存歌詞。這個(gè)程序就是根據(jù)md5管理對(duì)應(yīng)的歌詞文件和緩存文件,然后把緩存文件改成 歌曲名+.mp3格式。
原諒我取這么長(zhǎng)也不知道對(duì)不對(duì)的類名。
package com.zhou.run; import java.io.File; import java.util.HashMap; import java.util.Map; public class KugouTempFileToMp3AndModifyNameToTrueName { public static String KGTEMP = ".kgtemp"; public static 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)) { String filename = temp.getName(); String filemd5 = filename .substring(0, filename.lastIndexOf(KGTEMP)); if (!krc.exists()) return; 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(filemd5)) { String path = temp.getPath().substring(0, temp.getPath().lastIndexOf("\\")); File mp3File = new File(path + "\\" + mp3name + ".mp3"); temp.renameTo(mp3File); } System.out.println(filename + " " + filemd5); System.out.println(krcname + " " + mp3name + " " + krcmd5); } } public void ChangeByDir(String tempPath,String krcPath){ Map<String,File> temps = fileMd5Map(tempPath); Map<String,String> mp3Names = krcNameMd5Map(krcPath); for(String key :temps.keySet()){ File f = temps.get(key); if(f.exists()){ String path = f.getPath().substring(0, f.getPath().lastIndexOf("\\")); String mp3Name = mp3Names.get(key); File mp3File = new File(path + "\\" + mp3Name + ".mp3"); if(f.renameTo(mp3File)){ System.out.println(f.getName()+" to "+mp3File.getName()); System.err.print(" SUCCESS"); } } } } public Map<String, File> fileMd5Map(String path) { File dirFile = new File(path); Map<String, File> map = null; if (dirFile.isDirectory()) { map = new HashMap<String, File>(); for (File f : dirFile.listFiles()) { if (f.exists()&&f.isFile()&& f.getName().endsWith(KGTEMP)) { String filename = f.getName(); String filemd5 = filename.substring(0, filename.lastIndexOf(KGTEMP)); map.put(filemd5, f); } } } return map; } public Map<String,String> krcNameMd5Map(String path){ File dirFile = new File(path); Map<String, String> map = null; if (dirFile.isDirectory()) { map = new HashMap<String, String>(); for (File f : dirFile.listFiles()) { if (f.exists()&&f.isFile()&& f.getName().endsWith(KRC)) { String krcname = f.getName(); if(!krcname.contains("-"))continue; String krcmd5 = krcname.substring(krcname.lastIndexOf("-") + 1, krcname.lastIndexOf(KRC) - 1); String mp3name = krcname.substring(0, krcname.lastIndexOf("-")); map.put(krcmd5, mp3name); } } } return map; } } public static void main(String[] args) { KugouTempFileToMp3AndModifyNameToTrueName ktf = new KugouTempFileToMp3AndModifyNameToTrueName(); /*String tempPath = "D:/KuGou/mp3/2fad259e357078e89404be12e1fd7ae3.kgtemp"; String krcPath ="D:/KuGou/Lyric/周杰倫、袁詠琳 - 怎么了-2fad259e357078e89404be12e1fd7ae3.krc"; ktf.Change(tempPath,krcPath);*/ String tempDir ="D:/KuGou/mp3"; String krcDir="D:/KuGou/Lyric"; ktf.ChangeByDir(tempDir, krcDir); }
Change(string,string) 方法只是用來測(cè)試用的。調(diào)一下字符串之類的
主要使用ChangeByDir方法,參數(shù)是臨時(shí)文件的文件夾和歌詞文件的文件夾
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
iOS獲取AppIcon and LaunchImage''s name(app圖標(biāo)和啟動(dòng)圖片名字)
這篇文章主要介紹了iOS獲取AppIcon and LaunchImage's name(app圖標(biāo)和啟動(dòng)圖片名字)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-08-08MyBatisPlus?大數(shù)據(jù)量查詢慢的問題解決
本文主要介紹了MyBatis?Plus?解決大數(shù)據(jù)量查詢慢問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Java8使用stream實(shí)現(xiàn)list中對(duì)象屬性的合并(去重并求和)
這篇文章主要介紹了Java8使用stream實(shí)現(xiàn)list中對(duì)象屬性的合并(去重并求和),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01Java 創(chuàng)建并應(yīng)用PPT幻燈片母版的方法示例
幻燈片母版可供用戶設(shè)置幻燈片的樣式,本文將介紹如何用Java創(chuàng)建并應(yīng)用單個(gè)或多個(gè)幻燈片母版。感興趣可以了解一下2020-06-06J2ee 高并發(fā)情況下監(jiān)聽器實(shí)例詳解
這篇文章主要介紹了J2ee 高并發(fā)情況下監(jiān)聽器實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-02-02SpringBoot 利用RestTemplate http測(cè)試
這篇文章主要介紹了SpringBoot 利用RestTemplate http測(cè)試,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08