首先,我很抱歉我的英语。
我正在寻找一种有效的方法来读取java中的Big文件。我制作了一个日志分析程序,我的日志文件至少从500 MB到4 GB。我已经尝试过Filechannel类(Memory Mapped文件),但是我无法获得有效的结果。看看这里:http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ314_029.htm
我的目的是读取缓冲区中的数据,然后使用正则表达式。
DumpFilePath文件大小约为4 GB。
public static List<String> anaysis_main(String pattern_string) throws IOException {
List<String> result = new ArrayList<String>();
Pattern pattern = Pattern.compile(pattern_string, Pattern.CASE_INSENSITIVE);
File file = new File(DumpFilePath);
RandomAccessFile raf = new RandomAccessFile(file,"rw");
String line = null;
raf.seek(0);
int i = 0;
while((line=raf.readLine())!=null)
{
Matcher matcher = pattern.matcher(line);
while (matcher.find())
{
result.add(matcher.group(1));
}
}
raf.close();
return result;
}
有什么想法吗?
答案 0 :(得分:2)
您可以使用缓冲读卡器吗?可以在buffered reader here上阅读更多内容。
代码看起来像这样:
File file = new File(DumpFilePath);
//Open the file for reading
try {
BufferedReader br = new BufferedReader(new FileReader(file));
while ((thisLine = br.readLine()) != null) {
// Your line by line parsing payload here
Matcher matcher = pattern.matcher(thisLine);
while (matcher.find())
{
result.add(matcher.group(1));
}
} // end while
} // end try
catch (IOException e) {
System.err.println("Error: " + e);
}