【发布时间】:2015-10-01 03:40:38
【问题描述】:
我正在解析大小超过 2Gb 的日志文件。要求是将一些预定义的单词连同时间戳一起打印到文本/csv 文件中。我已经编写了以下代码,当使用一小段日志文件时,它工作正常,但使用 2GB 的实际输入日志文件时,我遇到了内存不足错误。请帮我解决这个问题。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.sql.Time;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyFileParser{
private static final String COMMA_STR = ",";
private static final String NEW_LINE_STR = "\n";
public static void main(String[] args) throws IOException{
String searchString = "" ;
String line = null;
boolean searchFlag = false;
StringBuffer sbr = new StringBuffer();
FileReader reader = new FileReader("C:\\Users\\Kiran\\Desktop\\mylogs\\File.txt");
FileWriter writter = new FileWriter("output.csv");
BufferedReader br = new BufferedReader(reader);
while( (line = br.readLine()) != null){
if(line.contains("prompf1") ){
searchString= "prompf1";
searchFlag = true;
}
else if (line.contains("prompf9")){
searchString = "prompf9";
searchFlag = true;
}
if(searchFlag){
String timeStamp = "";
int count = 0;
char[] charArray = line.toCharArray();
for(int i=0 ; i <= charArray.length ; i++){
// to remove [] at the begining and ending of time stamp in the file
if(charArray[i] == '[' || charArray[i] == ']'){
count ++ ;
}
else
timeStamp= timeStamp+ charArray[i];
if(count == 2){
break ;
}
}
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = formatter.parse(timeStamp);
searchString = date + COMMA_STR+ searchString;
sbr.append(searchString);
sbr.append(NEW_LINE_STR);
System.out.println(searchString);
}
}
writter.write(sbr.toString());
writter.flush();
writter.close();
}
}
【问题讨论】:
标签: java nio bufferedreader java-io