对于处理searchlog文件我正在写应阅读和线处理文件内容行的Java类。Java的阅读文本行无行分隔符
在日志文件文本类似于以下
[Integer User ID] [Queury] [Date: YYYY-MM-DD HH:MM:SS] [optional url]
我尝试使用扫描仪和阅读与nextLine()线,但这读取整个文件作为一行。任何想法如何我可以确保一次只得到一条线?
对于处理searchlog文件我正在写应阅读和线处理文件内容行的Java类。Java的阅读文本行无行分隔符
在日志文件文本类似于以下
[Integer User ID] [Queury] [Date: YYYY-MM-DD HH:MM:SS] [optional url]
我尝试使用扫描仪和阅读与nextLine()线,但这读取整个文件作为一行。任何想法如何我可以确保一次只得到一条线?
你可以只抓住了整个文件你拥有了它,然后拆分数据:
for (String line : "the entire file".split(System.getProperty("line.separator"))
{
System.out.println(line);
}
作为一个方面说明:System.getProperty("line.separator")
是通用新行字符。
的另一种方法:
BufferedReader bufferedReader = new BufferedReader(new FileReader("absolute file path"));
String line;
while ((line = bufferedReader.readLine()) != null)
{
System.out.println(line);
}
尝试使用BufferedReader
代替Scanner
。 BufferedReader
可容忍各种不同类型的线路终端 - 有可能Scanner
总是期望您的平台默认线路终端。
另外,使用Guava它可以让你做到这一点真的很容易,例如与CharStreams.readLines
,可能指定LineProcessor
。
日志文件通常很大,一次加载到内存中。不仅如此,而且.split会导致分配两倍! – 2012-04-23 18:32:44
差不多就是费尔明·席尔瓦说,我们正在谈论212mb txt文件在这里 – Rickyfox 2012-04-23 18:36:42
@Rickyfox我添加使用BufferedReader类的第二种方法。 – 2012-04-23 18:37:43