怎么用 Java 读 txt 文件,根据其中的条件,输出一个 csv 文件

【问题】

用 Java,
读 txt 文件(根据 Eclipse 软件的下方的 console 改成的 log.txt)
——————————————————————————————————————
例:
[2013-08-26 10:45:45,042] ERROR does not exist.
[2013-08-26 14:43:09,145] ERROR Certification failed.
[2013-08-26 14:43:09,145] ERROR Certification failed.
[2013-08-26 14:43:10,973] ERROR Certification failed.
[2013-08-26 14:43:33,285] ERROR Certification failed.
[2013-08-28 09:23:12,920] INFO Login succeeded.User ID=[CSDN123]
[2013-09-02 10:13:32,793] INFO Login succeeded.User ID=[CSDN123]
[2013-09-02 10:36:05,050] INFO Login succeeded.User ID=[CSDN123]
[2013-09-02 10:48:26,407] INFO Login succeeded.User ID=[CSDN123]
——————————————————————————————————————
从左至右分别是:
[时间][级别(有 Error、Info、Warning 等)][错误信息]

然后,根据时间(如:2013-08-26 至 2013-09-01),
将其中这些行的信息写成 csv 文件
(格式是:时间, 级别(有 ERROR、INFO、WARNING 等), 错误信息)。

或者,根据级别(如: 级别是 ERROR),
将这些行的信息写成 csv 文件,格式同上。

小弟初来乍到,求大神帮忙,实现此功能,万分感谢!

 

【回答】

       Java没有这些类库,直接处理可行,但非常麻烦。这种情况用SPL要方便得多,将日志解析成二维行列的序表,并输出到csv,脚本如下:


A

1

=file("E:\\log.txt").import@i()

2

=A1.(~.split(" ")).new(~(1):time,~(2):level,~.to(3,).concat(" "):content)

3

=A2.select(mid(time,2,23)>="2013-08-26"   && mid(time,2,23)<="2013-09-01")

4

=file("E:\\result.csv").export@tc(A3)

 

A1读取文本文件log.txt的内容,并将每一行作为一个序列成员,最后返回成序列。

undefined

A2:先对序列A1的成员进行拆分,每个成员拆成3部分,再创建成一个由timelevelcontent构成的序表,结果如下图:

undefined

A3:过滤选出time2013-08-262013-09-01的数据

undefined

A4:将A3结果写入csv文件。

这段代码很容易嵌入JAVA程序中使用(可参考Java 如何调用 SPL 脚本