问题描述:近期写bug的时候需要对实验的数据从XXX.log 输入到程序,进行简单的操作后输出到YYY.log文件。要求输入文件,读取/截取特定行,进行计算,输出到控制台以及文件。
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class logInput {
//输入文件
public static List<String> readLog(String filePath) throws FileNotFoundException {
List<String> list = new ArrayList<>();
try {
FileInputStream is = new FileInputStream(filePath);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br=new BufferedReader(isr);
String line;
String[] first;
try{
while ((line= br.readLine())!=null){
if(line.equals(""))
continue;
else
//以,分割 选取第一个数据
first =line.split(",");
list.add(first[0]);
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("reading line error");
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("file dir error");
}
return list;
}
public static void main(String[] args) throws IOException {
String filePath="/XXX.log";
String writefilePath="/YYY.log";
List<String> result,split;
int sum=0;
int MTTF;
result=readLog(filePath);
//截取行数
split=result.subList(244,274);
//保存当前控制台的位置
PrintStream console=System.out;
//程序输出到指定文件
System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream(writefilePath,true)),true));
//对数据的处理
System.out.println(split+", size is "+split.size());
for (String i:split) {
sum+=Integer.parseInt(i);
}
MTTF=sum/split.size();
System.out.println("in (10,20) MTTF is: "+MTTF);
//输出位置重定位为控制台,否则控制台输出为空
//这里可以用更高阶的分发流DistributOutPutStream但是我输出的结果简单就懒得搞了
System.setOut(console);
System.out.println(split+", size is "+split.size());
System.out.println("in (10,20) MTTF is: "+MTTF);
}
}