本帖最后由 丁佼 于 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分给是不给您看着办,给了我到北京就请您喝水。。。
|