自己写了个程序,从某台歌词服务器上下载了近一万首歌词(二十个线程,不到一个小时的时间)但是歌词的文件名都是数字 ,类似1.lrc、2.lrc……
歌词文件内容格式如下:
[ar:阿杜]
[ti:黄昏]
[hash:845f72c1f9a16c520463846e203039d2]
[total:260780]
[00:22.31] 下着雨的天气
[00:25.54] 好象你可爱的坏脾气
[00:30.35] 我的爱我的心
[00:33.55] 早就已经交给了你
[00:37.42] 你说我很不错
[00:40.72] 是不是在暗示什么
其中[ar:] 里面的是 歌曲的演唱者 [ti:]里面的是歌曲名。不过有些没有[ar:] 或[ti:]标记
现在想把这些歌词文件 用其内容 命名成 【演唱者 - 歌曲名】 的格式,以下是java的实现
import java.io.File;
import java.io.FileInputStream;
import java.io.FilenameFilter;
public class Rename {
/**
* @param args
*/
public static void main(String[] args) {
File file = new File("d:/aaa/"); //歌词存放路径
long start = System.currentTimeMillis();
File[] fList = file.listFiles(new FilenameFilter() { //过滤文件,只处理 lrc格式的
@Override
public boolean accept(File dir, String name) {
if (!name.endsWith(".lrc"))
return false;
return true;
}
});
byte[] buf = new byte[1000];
for (int i = 0; i < fList.length; i++) {
try {
FileInputStream fis = new FileInputStream(fList[i]);
int length = fis.read(buf, 0, buf.length); //将文件开头的1000个字节读入到buf里
fis.close();
String tmp = new String(buf, 0, length);
rename(fList[i], tmp); // 重命名
} catch (Exception e) {
System.out.println(e);
}
}
long usedTime = System.currentTimeMillis()-start;
System.out.println("用时:"+usedTime);
}
public static void rename(File file, String str) {
String fullname = "";
String artist = "";
String name = "";
if (-1 != str.indexOf("[ar:")) {
String tmp = str.substring(str.indexOf("[ar:"), str.length());
artist = tmp.substring(0, tmp.indexOf("]"))
.replaceAll("\\[ar:", "");
if (-1 != str.indexOf("[ti:")) {
String tmp2 = str.substring(str.indexOf("[ti:"), str.length());
name = tmp2.substring(0, tmp2.indexOf("]")).replaceAll(
"\\[ti:", "");
fullname = artist + " - " + name;
} else {
fullname = artist + " - 未知歌名";
}
} else {
if (-1 != str.indexOf("[ti:")) {
String tmp2 = str.substring(str.indexOf("[ti:"), str.length());
name = tmp2.substring(0, tmp2.indexOf("]")).replaceAll(
"\\[ti:", "");
fullname = "未知歌手 - " + name;
}
}
if (!"".equals(fullname)) {
file.renameTo(new File(file.getParent() + fullname + ".lrc"));
}
}
}
经实际测试,处理近10000个文件 实际用时 不到一秒!
分享到:
相关推荐
算法的名字以发明者的姓氏首字母命名:Ron Rivest, Adi Shamir 和Leonard Adleman。虽然自1978年提出以来,RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击,至今(2006年)未被完全攻破。随着越来越多的...
本资源摘要信息是根据《Java 语言程序设计实验指导(2023 版)》文件的内容生成的知识点。 实验说明与要求 在进行 Java 语言程序设计实验时,需要注意以下几点: * 实验课中,不允许使用智能手机等工具。 * ...
算法的名字以发明者的姓氏首字母命名:Ron Rivest, Adi Shamir 和Leonard Adleman。虽然自1978年提出以来,RSA的安全性一直未能得到理论上的证明,但它经历了各种攻击,至今(2006年)未被完全攻破。随着越来越多的...
基于vue前台、java后台、mysql实现的档案管理系统源码+部署说明.zip 1.1 软件 本系统主要分为vue前台、java后台、mysql数据库三部分。 Vue前台的运行环境为node.js18。 Java后台的运行环境为jdk1.8。 Mysql数据库的...
基于JAVA, SQL开发的学校医务室管理系统,使用JavaFX编写界面,代码和开发文档详见其他文件。 1 引言 5 1.1 编写目的 5 1.2 范围 5 1.3 背景 5 2 系统环境 5 2.1 操作系统 5 2.2 数据库 5 2.3 客户端 5 2.4 网络及...
首先把我们想要计算机做的事情,通过Java表达出来,写成Java文件,这个过程就是 编写代码的过程。如上图所示的 Hello java文件。 2:编译 写完Jaa代码后,机器并不认识我们写的Java代码,需要进行编译成为字节码,编译 后的...
智能化子文件命名,以便手机或Mp4软件对其进行正确的排序 3.填完大小按回车即分割 4.一旦数值填写太小而导致子文件过多,可以使用紧急停止按钮 欢迎一切意见或建议 by:王洪吉 mail:wanghongji@neusoft.com
java项目p2p源码#P2P 套接字 #注意:不再维护或支持 P2P 套接字。 它存在于此处用于存档目的。 ##概述 P2P Sockets 使得编写基于 JXTA 的对等应用程序变得容易。 P2P Sockets 允许程序员获得 JXTA 的大部分功能,...
3. 修改完成之后,进入本项目下的`shipPet/src/main`文件夹,运行`ShipPetApplication.java`文件即可。 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合...
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...
> 重命名 MyBatis 元素在 Java 映射器中,右键单击 -> MyBatis Refactor -> 重命名 MyBatis 元素重命名 Java 映射器方法也会更新其引用Miscellaneous向导创建一个新的 XML 映射文件控制台视图中的智能复制菜单用以...
**其中 message.properties必须要有,其他的配置文件命名格式为:message_语言_国家.properties**,其中语言和国家格式可以查看 java.util.Locale 类中的说明。 3. 自定义重写 LocaleResolver 类的 resolveLocale ...
咋把dex文件变成java源码 还原剂 Redexer 是一个重新设计的工具,用于操作 Android 应用程序二进制文件。 该工具能够将 DEX 文件解析为内存中的数据结构; 推断应用程序使用哪些参数使用某些权限(我们将此功能命名...
如何给包、文件、函数命名? - 每个额外的命名必须传递信息 - 尽量少的名称 - 信息论 ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业...
这个自述文件解释了安装说明、每个包的功能以及一些使用的变量命名约定。 有关每个特定类的其他信息可以在该类的 Java 文件中找到。 安装说明 一般的 克隆这个 repo 运行./gradlew下载 gradle 和需要的 FRC/Vendor ...
这个自述文件解释了安装说明、每个包的功能以及一些使用的变量命名约定。 有关每个特定类的其他信息可以在该类的 Java 文件中找到。 安装说明 一般的 克隆这个 repo 运行./gradlew下载 gradle 和需要的 FRC 库 运行....
例如,在项目工程中新建一个java文件,命名为BasePort.java,用于定义端口基类,打开ZigBee端口,定义openZigBeePort方法。然后,新建closeZigBeePort()方法用于关闭四个串口。最后,实例化一个线程对象,每隔1s更新...
当我开发这个曾命名为elfJavaScript基础库接近第一个发布版本完成的时候,我逐渐意识到elf已经不仅是个基础库了,更重要的是,在这个库的积累过程中,我总结出了一些粗浅的组建通用基础库规范性质的东西。...
需要注意的是,由于jar和exe依赖资源文件,需要复制到src目录下才可以运行,其中exe还必须将jdk目录复制到同一目录下并命名为jre才可运行 建议使用一键安装包,不依赖java环境: 链接: 提取码:i779 目前待解决的...
5. 智能的国际化和本地化:支持字符集智能化、数字格式本地化敏感、日期和时间格式本地化敏感等。 6. 强大的XML处理能力:支持递归遍历XML树,能够在模板中清楚和直觉的访问XML对象模型。 FreeMarker的设计指南是...