我正在尝试读取一个巨大的文件(> 1GB),我在考虑将它作为随缓冲读取器随机访问的文件读取会很有效。用缓冲读取器读取随机访问文件
我需要逐行读取文件中的行,并解析它
不过是对Java IO的API,我不知道我该怎么做..
我感谢你的帮助。
我正在尝试读取一个巨大的文件(> 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
是路径要读取的文件。
请注意'FileReader'假定给定文件使用默认字符编码进行编码。否则无法告诉它。 – seh 2012-07-26 15:58:02
您是否需要阅读所有内容并从头开始?如果您知道可以从哪个字节开始,则可以使用RandomAccessFile跳转到文件的不同部分。我认为这是寻求功能。
我不在乎在哪里开始,只要我结束阅读整个文件行 – user1203861 2012-07-26 16:23:38
然后我瘦jayeff答案是你最好的选择 – RNJ 2012-07-26 16:39:43
虽然在java中完全可行的,我想根据我的经验表明:
如果你在Unix平台上,你可以使用外部的shell脚本,通过日志的绿带搜索。 sed
非常适合此目的。具体用法如下:http://www.grymoire.com/Unix/Sed.html
无论何时需要通过日志文件读取/ grep,通过java文件调用shell脚本。
如何?
1)在您的java代码中,使用ProcessBuilder
类。它可以在shell脚本作为对Arg的构造器
ProcessBuilder obj = new ProcessBuilder("FastLogRead.sh");
2)过程
Process process = obj.start();
3)你可以通过这个阅读这个shell的输出,直接在BufferedRead创建对象
BufferedReader br=new BufferedReader(new InputStreamReader(process.getInputStream()));
优点:
通过平均加速执行。 10倍(我寻遍各地4GB的日志文件)
缺点:
一些开发商不喜欢引进轻量的shell脚本中的java的领域,因此想去Java的RandomAccessFile
。这是有道理的。
对于您的情况,您可以选择标准化和性能。
您只能读取一个随机字节,而不是随机字符(因为它们可能会有所不同)您要做的是这些类不能很好地协同工作? – 2012-07-26 15:21:12
你想做什么?你需要阅读整个文件吗?在文件中间以固定偏移量读取内容?阅读你在文件中间搜索的内容?你只是试图读取整个文件“更快”吗?问:你试图解决什么问题? – paulsm4 2012-07-26 15:23:39
我需要逐行读取文件并解析它,我需要它尽可能快 – user1203861 2012-07-26 15:29:44