java实现酷狗音乐临时缓存文件转换为MP3文件的方法
本文实例讲述了java实现酷狗音乐临时缓存文件转换为MP3文件的方法。分享给大家供大家参考,具体如下:
酷狗临时缓存文件,其实已经是吧MP3文件下载好了,只是名字看上去好像是通过md5算法重命名的。
酷狗在缓存文件的时候会同时缓存歌词。这个程序就是根据md5管理对应的歌词文件和缓存文件,然后把缓存文件改成歌曲名+.mp3格式。
原谅我取这么长也不知道对不对的类名。
packagecom.zhou.run;
importjava.io.File;
importjava.util.HashMap;
importjava.util.Map;
publicclassKugouTempFileToMp3AndModifyNameToTrueName{
publicstaticStringKGTEMP=".kgtemp";
publicstaticStringKRC="krc";
publicvoidChange(StringtempPath,StringkrcPath){
Filetemp=newFile(tempPath);
Filekrc=newFile(krcPath);
if(temp.exists()&&temp.getName().endsWith(KGTEMP)){
Stringfilename=temp.getName();
Stringfilemd5=filename
.substring(0,filename.lastIndexOf(KGTEMP));
if(!krc.exists())
return;
Stringkrcname=krc.getName();
Stringkrcmd5=krcname.substring(krcname.lastIndexOf("-")+1,
krcname.lastIndexOf(KRC)-1);
Stringmp3name=krcname.substring(0,krcname.lastIndexOf("-"));
if(krcmd5.equals(filemd5)){
Stringpath=temp.getPath().substring(0,
temp.getPath().lastIndexOf("\\"));
Filemp3File=newFile(path+"\\"+mp3name+".mp3");
temp.renameTo(mp3File);
}
System.out.println(filename+""+filemd5);
System.out.println(krcname+""+mp3name+""+krcmd5);
}
}
publicvoidChangeByDir(StringtempPath,StringkrcPath){
Map<String,File>temps=fileMd5Map(tempPath);
Map<String,String>mp3Names=krcNameMd5Map(krcPath);
for(Stringkey:temps.keySet()){
Filef=temps.get(key);
if(f.exists()){
Stringpath=f.getPath().substring(0,
f.getPath().lastIndexOf("\\"));
Stringmp3Name=mp3Names.get(key);
Filemp3File=newFile(path+"\\"+mp3Name+".mp3");
if(f.renameTo(mp3File)){
System.out.println(f.getName()+"to"+mp3File.getName());
System.err.print("SUCCESS");
}
}
}
}
publicMap<String,File>fileMd5Map(Stringpath){
FiledirFile=newFile(path);
Map<String,File>map=null;
if(dirFile.isDirectory()){
map=newHashMap<String,File>();
for(Filef:dirFile.listFiles()){
if(f.exists()&&f.isFile()&&f.getName().endsWith(KGTEMP)){
Stringfilename=f.getName();
Stringfilemd5=filename.substring(0,
filename.lastIndexOf(KGTEMP));
map.put(filemd5,f);
}
}
}
returnmap;
}
publicMap<String,String>krcNameMd5Map(Stringpath){
FiledirFile=newFile(path);
Map<String,String>map=null;
if(dirFile.isDirectory()){
map=newHashMap<String,String>();
for(Filef:dirFile.listFiles()){
if(f.exists()&&f.isFile()&&f.getName().endsWith(KRC)){
Stringkrcname=f.getName();
if(!krcname.contains("-"))continue;
Stringkrcmd5=krcname.substring(krcname.lastIndexOf("-")+1,
krcname.lastIndexOf(KRC)-1);
Stringmp3name=krcname.substring(0,krcname.lastIndexOf("-"));
map.put(krcmd5,mp3name);
}
}
}
returnmap;
}
}
publicstaticvoidmain(String[]args){
KugouTempFileToMp3AndModifyNameToTrueNamektf=newKugouTempFileToMp3AndModifyNameToTrueName();
/*StringtempPath="D:/KuGou/mp3/2fad259e357078e89404be12e1fd7ae3.kgtemp";
StringkrcPath="D:/KuGou/Lyric/周杰伦、袁咏琳-怎么了-2fad259e357078e89404be12e1fd7ae3.krc";
ktf.Change(tempPath,krcPath);*/
StringtempDir="D:/KuGou/mp3";
StringkrcDir="D:/KuGou/Lyric";
ktf.ChangeByDir(tempDir,krcDir);
}
Change(string,string)方法只是用来测试用的。调一下字符串之类的
主要使用ChangeByDir方法,参数是临时文件的文件夹和歌词文件的文件夹
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。