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