欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现酷狗音乐临时缓存文件转换为MP3文件的方法

程序员文章站 2024-03-31 21:31:16
本文实例讲述了java实现酷狗音乐临时缓存文件转换为mp3文件的方法。分享给大家供大家参考,具体如下: 酷狗临时缓存文件,其实已经是吧mp3文件下载好了,只是名字看上去好...

本文实例讲述了java实现酷狗音乐临时缓存文件转换为mp3文件的方法。分享给大家供大家参考,具体如下:

酷狗临时缓存文件,其实已经是吧mp3文件下载好了,只是名字看上去好像是通过md5算法重命名的。

酷狗在缓存文件的时候会同时缓存歌词。这个程序就是根据md5管理对应的歌词文件和缓存文件,然后把缓存文件改成 歌曲名+.mp3格式。

原谅我取这么长也不知道对不对的类名。

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) 方法只是用来测试用的。调一下字符串之类的

主要使用changebydir方法,参数是临时文件的文件夹和歌词文件的文件夹

更多关于java算法相关内容感兴趣的读者可查看本站专题:《java数据结构与算法教程》、《java操作dom节点技巧总结》、《java文件与目录操作技巧汇总》和《java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。