怎么用 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中的内容,并将每一行作为一个序列成员,最后返回成序列。
A2:先对序列A1的成员进行拆分,每个成员拆成3部分,再创建成一个由time、level和content构成的序表,结果如下图:
A3:过滤选出time列2013-08-26至2013-09-01的数据。
A4:将A3结果写入csv文件。
这段代码很容易嵌入JAVA程序中使用(可参考Java 如何调用 SPL 脚本)。