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

 更新时间:2016年08月19日 09:37:59   作者:k55k3  
这篇文章主要介绍了java实现酷狗音乐临时缓存文件转换为MP3文件的方法,涉及java针对文件操作的相关技巧,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

相关文章

  • Spring Mvc中CommonsMultipartFile的特性实例详解

    Spring Mvc中CommonsMultipartFile的特性实例详解

    这篇文章主要给大家介绍了关于Spring Mvc中CommonsMultipartFile特性的相关资料,SpringMVC拥有强大的灵活性,非侵入性和可配置性,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • Java陷阱之慎用入参做返回值详解

    Java陷阱之慎用入参做返回值详解

    这篇文章主要给大家介绍了关于Java陷阱之慎用入参做返回值的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • jpa EntityManager 复杂查询实例

    jpa EntityManager 复杂查询实例

    这篇文章主要介绍了jpa EntityManager 复杂查询实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Boot快速搭建Spring框架教程

    Spring Boot快速搭建Spring框架教程

    这篇文章主要为大家详细介绍了Spring Boot快速搭建Spring框架教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • javafx实现时钟效果

    javafx实现时钟效果

    这篇文章主要为大家详细介绍了javafx实现时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • Java基础教程之String深度分析

    Java基础教程之String深度分析

    这篇文章主要给大家介绍了关于Java基础教程之String的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • springcloud config配置读取优先级过程详解

    springcloud config配置读取优先级过程详解

    这篇文章主要介绍了springcloud config配置读取优先级过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • java之assert关键字用法案例详解

    java之assert关键字用法案例详解

    这篇文章主要介绍了java之assert关键字用法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 一文讲解如何解决Java中的IllegalArgumentException异常

    一文讲解如何解决Java中的IllegalArgumentException异常

    这篇文章主要给大家介绍了关于如何解决Java中IllegalArgumentException异常的相关资料,IllegalArgumentException是Java中的一个标准异常类,通常在方法接收到一个不合法的参数时抛出,需要的朋友可以参考下
    2024-03-03
  • Spring Boot启动过程完全解析(一)

    Spring Boot启动过程完全解析(一)

    这篇文章主要介绍了Spring Boot启动过程完全解析(一),需要的朋友可以参考下
    2017-04-04

最新评论