A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 丁佼 于 2012-4-27 17:46 编辑
  1. import java.io.*;
  2. //直接运行程序,输入一个lrc文件的途径即可。
  3. class MyLrcReader{

  4.         public static void main(String[] arg) throws Exception{
  5.                 MyLrcReader lrcReader = new MyLrcReader();
  6.                 File lrcFile = lrcReader.getLrcPath();
  7.                 //读取文件
  8.                 System.out.println("开始读取"+lrcFile.getName());
  9.                 System.out.println();
  10.                 BufferedReader fileRead = new BufferedReader(new FileReader(lrcFile));
  11.                 String lineLrc =null;
  12.                 //打印文件
  13.                 while ( ( lineLrc= fileRead.readLine() ) !=null){
  14.                         lrcReader.Print(lineLrc);
  15.                 }
  16.                 System.out.println();
  17.                 System.out.println(lrcFile.getName()+"播放完毕");
  18.         }

  19.         //文件名读取、判断
  20.         private File getLrcPath() throws Exception{
  21.                 int i = 0;
  22.                 File lrcFile = null;
  23.                 while( i != 1 ){
  24.                         System.out.println("请输入lrc文件的途径,书写必须包含后缀");
  25.                         BufferedReader pathInput = new BufferedReader(new InputStreamReader(System.in));
  26.                         String lrcPath = pathInput.readLine();
  27.                         if (lrcPath.endsWith(".lrc")){
  28.                                 lrcFile = new File(lrcPath);
  29.                                 if( ! lrcFile.exists() ){
  30.                                         System.out.println("文件不存在");
  31.                                         System.out.println();
  32.                                         continue ;
  33.                                 }
  34.                                 i = 1;
  35.                         }else {
  36.                                 System.out.println("文件名错误");
  37.                                 System.out.println();
  38.                         }
  39.                 }
  40.                 return lrcFile;
  41.         }

  42.         //lrc文件输出
  43.         static long lasttime= 0;//记录上一句歌词的时间,在下面的函数中作为计算下一句歌词播放时长的参数
  44.         private void Print(String lrc )throws Exception{
  45.                 //对歌词进行解析
  46.                 if (lrc.startsWith("[ti:") ){
  47.                         System.out.println("歌曲名:"+lrc.substring(4, lrc.length()-1) );
  48.                 }else if (lrc.startsWith("[ar:") ){
  49.                         System.out.println("歌手:"+lrc.substring(4, lrc.length()-1) );
  50.                 }else if (lrc.startsWith("[al:") ){
  51.                         System.out.println("专辑:"+lrc.substring(4, lrc.length()-1) );
  52.                 }else if (lrc.startsWith("[by:") ){
  53.                         System.out.println("歌词制作者:"+lrc.substring(4, lrc.length()-1) );
  54.                         System.out.println();
  55.                 }else{
  56.                         String[] lrcPart = lrc.split( "\\]" );
  57.                         //生成歌词停顿时间长度
  58.                         String[] timeMsPart = lrcPart[0].split( "\\." );
  59.                         String[] timeSecPart = timeMsPart[0].split( "\\:" );
  60.                         String[] timeMinPart = timeSecPart[0].split( "\\[" );
  61.                         System.out.print(timeMsPart[1]+",");
  62.                         System.out.print(timeSecPart[1]+",");
  63.                         System.out.print(timeMinPart[1]+",");
  64.                         Long time = null;
  65.                         time = Long.parseLong(timeMsPart[1])
  66.                                 +Long.parseLong(timeSecPart[1])*1000
  67.                                 +Long.parseLong(timeMinPart[1])*60000
  68.                                 -lasttime;
  69.                         //System.out.print(time+",") ;

  70.                         //读到的新行里的时间-上一行的时间=上一行停顿的时间,所以停顿放在打印语句的前面
  71.                         if(time!=0){
  72.                                 synchronized(time){
  73.                                         time.wait(time);
  74.                         }}
  75.                         System.out.println(lrcPart [1]);
  76.                         lasttime+=time;
  77.                 }
  78. } }
复制代码
程序至少是可以正常运行了,
缺点是:所有的异常都没处理。。。

还有所有的歌词都会出现在屏幕上,怎么才能打印新语句的同时去除掉旧歌词,求帮助。。。

另:老师,这几天我回复的帖子没有20也有15了,一共只拿了1点技术分???不能说我每一个都是好答案,至少没有放一句口水话在里面哈,个个都是正儿八经的知识点,而且我确保每个回复都是把代码编译通过才给的回复,每个回复花费时间都在半小时以上,要说有错误我真是不觉得。。只拿1点技术分,现在拿分也太难了。
逼急了现在我是自己写代码了,知识点涉及 文件IO、线程、字符串、注释,1分给是不给您看着办,给了我到北京就请您喝水。。。

评分

参与人数 1技术分 +1 黑马币 +20 收起 理由
职业规划-刘倩老师 + 1 + 20

查看全部评分

2 个回复

倒序浏览
开眼了,只要肯去做,什么都可以成功。
回复 使用道具 举报
开眼了,只要肯去做,什么都可以成功。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马