展开全部
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassFileParser{
privateFilefile;
privateBufferedReaderreader;
privateInputStreamis;
privateInputStreamReaderisReader;
publicFileParser(){}
publicFileParser(StringfilePath){
file=newFile(filePath);
initReader();
}
/**
初始化文件输入32313133353236313431303231363533e78988e69d8331333337613235流,为文件读取做准备
*/
privatevoidinitReader(){
if(file!=null&&file.isFile()&&file.canRead()){
//文件存在可读取并且是“文件”而不是目录
try{
is=newFileInputStream(file);//创建文件输入流
isReader=newInputStreamReader(is);//创建输出流的Reader
reader=newBufferedReader(isReader);//用于按行读取文件
}catch(Exceptione){
e.printStackTrace();
}
}
}
/**
转换文件内容,将文件中的数据转换成List
*/
publicListparse(){
ListlstNumber=null;//最终结果保存在这里
StringtxtLine=null;//临时变量,保存按行读取到的字符串
StringsplitRegexp="([0-9]+)\\s?";//匹配数字的正则表达式
Patternpattern=pile(splitRegexp);//编译正则
Matchermatcher=null;//正则的Matcher对象
//开始读取文件
if(reader!=null){
lstNumber=newArrayList();//初始化List
try{
while((txtLine=reader.readLine())!=null){//按行读取文件
matcher=pattern.matcher(txtLine);//获取matcher实例,准备进行查找
while(matcher.find()){//查找符合条件的匹配组,将结果放入List
lstNumber.add(Integer.valueOf(matcher.group(1)));
}
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
//关闭流
try{
reader.close();
isReader.close();
is.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
returnlstNumber;//返回结果
}
publicstaticvoidmain(String[]args){
FileParserfileParser=newFileParser("D:\\test.txt");
System.out.println(fileParser.parse());
}
}
test.txt内容格式如下:
1 10 100 99 5 76 82 93
20 123 75 1232 85 12
程序核心就是用正则表达式来查找文件中符合要求的内容,效率要比字符串的分割操作高。大体流程就是判断文件是不是存在且可读取,然后通过BufferedReader按行取得文件内容,最后用正则表达式来分离出目标数据放入结果集中。