本帖最后由 achilles 于 2012-7-12 15:23 编辑
import java.io.*;
class MyLrcReader{
public static void main(String[] arg) throws Exception{
MyLrcReader lrcReader = new MyLrcReader(); //主函数无法调用非静态方法,建立对象来完成调用
File lrcFile = lrcReader.getLrcPath(); //获取一个正确可用的源文件
System.out.println("开始读取"+lrcFile.getName());
BufferedReader fileRead = new BufferedReader(new FileReader(lrcFile));
String lineLrc =null;
while ( ( lineLrc= fileRead.readLine() ) !=null){
if(lineLrc.length()==0)//加入判断,防止后面的空角标异常导致程序无法结束
break;
System.out.println(lineLrc+"打印于主函数,lrc的length为:"+lineLrc.length());
lrcReader .Print(lineLrc); //调用打印方法
}
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文件输出
private void Print(String lrc )throws Exception{
System.out.println(lrc);
//根据歌词各部分区别,进行不同的切割处理
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) );
}else{
System.out.println(lrc);
String[] lrcPart = lrc.split( "]" ); //将歌词和时间切割开
//System.out.println(lrcPart.length);
System.out.println("lrc"+lrcPart[0]);
//获取延迟时间
String[] timeMsPart = lrcPart[0].split( "\\." );// .在正则中有意义 要使用.作为切割标示要先转义
String[] timeSecPart = timeMsPart[0].split( "\\:" );
String[] timeMinPart = timeSecPart[0].split( "\\[" );//substring(1, timeSecPart[0].length()-1) ;
System.out.println(timeMsPart[0]);
System.out.println(timeSecPart[0]);
System.out.println(timeMinPart[0]);
Long time = 0L;
time = Long.parseLong(timeMsPart[1])
+Long.parseLong(timeSecPart[1])*100
+Long.parseLong(timeMinPart[1])*6000;
//打印后暂停指定的时间
System.out.println(lrcPart [lrcPart.length-1]);//修改完防止角标越界
Thread.sleep(time);// 要实现等待功能可以调用sleep方法 而wait方法是用于多线程控制的 这里不涉及多线程 用wait还会
// 抛 IllegalMonitorStateException异常 导致程序无法正常运行
}
}
}
代码修改完并调试完了 现在可以实现你期望的效果了 修改过的地方使用红色加了备注 |