0

我正在尝试读取一个大文件(> 1GB),我认为使用缓冲读取器将其作为随机访问文件读取会很有效。

我需要逐行读取文件并解析它

然而,作为 JAVA IO Api 的新手,我不确定我该怎么做。

我感谢您的帮助。

4

3 回答 3

3

您可以为此使用 Java 的 BufferedReader:

BufferedReader reader = new BufferedReader(new FileReader(fileName));
String line;
while ((line = reader.readLine()) != null) {
  // Do some stuff with the line
}

fileName是您要读取的文件的路径。

于 2012-07-26T15:35:14.123 回答
0

您需要从头开始阅读所有内容吗?如果您知道可以从哪个字节开始,您可以使用 RandomAccessFile 跳转到文件的不同部分。我认为这是执行此操作的搜索功能。

于 2012-07-26T16:02:47.553 回答
-1

虽然它在 java 中是完全可行的,但我想根据我的经验提出建议:

如果您在 Unix 平台上,您可以使用外部 shell 脚本来搜索 GB 的日志。sed非常适合此目的。具体用法在这里:http ://www.grymoire.com/Unix/Sed.html

每当您需要通过日志文件读取/grep 时,通过 java 文件调用 shell 脚本。

如何?

1)在你的java代码中,使用ProcessBuilderclass。它可以将 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. 这是有道理的。

对于您的情况,您可以在标准化和性能之间进行选择。

于 2013-02-26T11:13:01.220 回答