黑马程序员技术交流社区
标题:
哟,命令行版超简易lrc歌词阅读器写成!共享下代码。哈。
[打印本页]
作者:
丁佼
时间:
2012-4-27 17:26
标题:
哟,命令行版超简易lrc歌词阅读器写成!共享下代码。哈。
本帖最后由 丁佼 于 2012-4-27 17:46 编辑
import java.io.*;
//直接运行程序,输入一个lrc文件的途径即可。
class MyLrcReader{
public static void main(String[] arg) throws Exception{
MyLrcReader lrcReader = new MyLrcReader();
File lrcFile = lrcReader.getLrcPath();
//读取文件
System.out.println("开始读取"+lrcFile.getName());
System.out.println();
BufferedReader fileRead = new BufferedReader(new FileReader(lrcFile));
String lineLrc =null;
//打印文件
while ( ( lineLrc= fileRead.readLine() ) !=null){
lrcReader.Print(lineLrc);
}
System.out.println();
System.out.println(lrcFile.getName()+"播放完毕");
}
//文件名读取、判断
private File getLrcPath() throws Exception{
int i = 0;
File lrcFile = null;
while( i != 1 ){
System.out.println("请输入lrc文件的途径,书写必须包含后缀");
BufferedReader pathInput = new BufferedReader(new InputStreamReader(System.in));
String lrcPath = pathInput.readLine();
if (lrcPath.endsWith(".lrc")){
lrcFile = new File(lrcPath);
if( ! lrcFile.exists() ){
System.out.println("文件不存在");
System.out.println();
continue ;
}
i = 1;
}else {
System.out.println("文件名错误");
System.out.println();
}
}
return lrcFile;
}
//lrc文件输出
static long lasttime= 0;//记录上一句歌词的时间,在下面的函数中作为计算下一句歌词播放时长的参数
private void Print(String lrc )throws Exception{
//对歌词进行解析
if (lrc.startsWith("[ti:") ){
System.out.println("歌曲名:"+lrc.substring(4, lrc.length()-1) );
}else if (lrc.startsWith("[ar:") ){
System.out.println("歌手:"+lrc.substring(4, lrc.length()-1) );
}else if (lrc.startsWith("[al:") ){
System.out.println("专辑:"+lrc.substring(4, lrc.length()-1) );
}else if (lrc.startsWith("[by:") ){
System.out.println("歌词制作者:"+lrc.substring(4, lrc.length()-1) );
System.out.println();
}else{
String[] lrcPart = lrc.split( "\\]" );
//生成歌词停顿时间长度
String[] timeMsPart = lrcPart[0].split( "\\." );
String[] timeSecPart = timeMsPart[0].split( "\\:" );
String[] timeMinPart = timeSecPart[0].split( "\\[" );
System.out.print(timeMsPart[1]+",");
System.out.print(timeSecPart[1]+",");
System.out.print(timeMinPart[1]+",");
Long time = null;
time = Long.parseLong(timeMsPart[1])
+Long.parseLong(timeSecPart[1])*1000
+Long.parseLong(timeMinPart[1])*60000
-lasttime;
//System.out.print(time+",") ;
//读到的新行里的时间-上一行的时间=上一行停顿的时间,所以停顿放在打印语句的前面
if(time!=0){
synchronized(time){
time.wait(time);
}}
System.out.println(lrcPart [1]);
lasttime+=time;
}
} }
复制代码
程序至少是可以正常运行了,
缺点是:所有的异常都没处理。。。
还有所有的歌词都会出现在屏幕上,怎么才能打印新语句的同时去除掉旧歌词,求帮助。。。
另:老师,这几天我回复的帖子没有20也有15了,一共只拿了1点技术分???不能说我每一个都是好答案,至少没有放一句口水话在里面哈,个个都是正儿八经的知识点,而且我确保每个回复都是把代码编译通过才给的回复,每个回复花费时间都在半小时以上,要说有错误我真是不觉得。。只拿1点技术分,现在拿分也太难了。
逼急了现在我是自己写代码了,知识点涉及 文件IO、线程、字符串、注释,1分给是不给您看着办,给了我到北京就请您喝水。。。
作者:
prospect
时间:
2012-4-27 21:17
开眼了,只要肯去做,什么都可以成功。
作者:
prospect
时间:
2012-4-27 21:17
开眼了,只要肯去做,什么都可以成功。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2