我正在尝试阅读一个巨大的文件(> 1GB),我认为将其作为带有缓冲读卡器的随机访问文件来阅读会很有效。
我需要逐行读取文件并解析它
然而,作为JAVA IO Api的新手,我不知道我该怎么做..
感谢您的帮助。
答案 0 :(得分:3)
您可以使用Java的BufferedReader:
BufferedReader reader = new BufferedReader(new FileReader(fileName));
String line;
while ((line = reader.readLine()) != null) {
// Do some stuff with the line
}
fileName
是您要阅读的文件的路径。
答案 1 :(得分:0)
您是否需要从头开始阅读所有内容?如果您知道可以从哪个字节开始,则可以使用RandomAccessFile跳转到文件的不同部分。我认为这是寻求功能。
答案 2 :(得分:-1)
虽然它在java中完全可行,但我想根据我的经验建议:
如果您使用的是Unix平台,则可以使用外部shell脚本来搜索日志的GB。 sed
非常适合此目的。具体用法:http://www.grymoire.com/Unix/Sed.html
每当需要读取/ grep日志文件时,通过java文件调用shell脚本。
如何吗
1)在您的java代码中,使用ProcessBuilder
类。它可以将shell脚本作为构造函数
ProcessBuilder obj = new ProcessBuilder("FastLogRead.sh");
2)为Process
创建对象 Process process = obj.start();
3)您可以通过此
直接在BufferedRead中读取此shell的输出 BufferedReader br=new BufferedReader(new InputStreamReader(process.getInputStream()));
<强>优点:强>
平均加速执行。 10次(我搜索了大约4GB的日志文件)
<强>缺点:强>
有些开发人员不喜欢在java领域引入轻量级shell脚本,因此想要使用java的RandomAccessFile
。这是有道理的。
对于您的情况,您可以选择标准化和性能。