[英]How can I read/get some specific informations from txt file using Java
使用Java从许多* .log文件中获取某些特定信息时,我面临一些困难。 我已经花了几个小时进入这个论坛,但没有找到我需要的东西。 首先,我想获取这些信息并在控制台上打印它们,以确保我需要的所有信息都能正常工作。 * .log文件中的数据如下:
Date Logged: 10-22-2014 11:11:00 AM
Task Name: PROJECT_X_X00_SPI3
User ID: Operator Mode
System: PP/PS Series FlashCORE
Machine ID: 12345678910
Device: MACRONIX MX25L6473EM2 SO8
Data Source: X:\XPTO\PROJECT\BINARYFILE.bin
Sumcheck: 12345678
Process: Continuity/Blank Check/ID Check/Erase/Program/Verify/Auto Secure/Mark/Vision
Process Status: Job Begin Status: New Job, Job End Status: Stopped
TLWin Session ID: < none >
Job Start Time: 10-22-2014 03:38:57 AM
Job End Time: 10-22-2014 11:11:00 AM
Devices Total: 5051
Devices Passed: 5041
Devices Failed: 10
Overall Device Yield: 99.80%
Task Description: MX25L6473EM
Nominal Throughput: 722 dph
Job Throughput: 679 dph
这是我为了从* .log文件读取所有数据而编写的代码:
public class ReadingDataTxt {
public static void main(String[] args) {
String dir = "F:\\XPTO";
File file = new File(dir);
for (String arq : file.list()) {
if (arq.endsWith(".log")) {
System.out.println("--------->" + arq + "<---------");
try {
System.out.println(reading(dir + "\\" + arq));
} catch (Exception e) {
}
}
}
}
private static String reading(String dir) throws Exception {
String line = " ", content = " ";
BufferedReader br = new BufferedReader(new FileReader(new File(dir)));
while ((line = br.readLine()) != null) {
if (!line.isEmpty()) {
content = new StringBuilder(content).append(line.concat("\n")).toString();
}
}
br.close();
return content;
}
}
我需要的最重要信息是第一个字符串前的数据(突出显示):记录日期: 2014年10月22日任务名称: PROJECT_X_X00_SPI3设备: MACRONIX MX25L6473EM2 SO8设备总数: 5051设备失败: 10设备总产量: 99.80 %
第二步是制作一个CSV文件,以便将这些信息放入数据库中。
非常感谢!
您可以使用Java版本的Grok Parser。 您可以定义一个模式,文件中与该模式匹配的所有行都将被解析。
提供一个伪代码
您可以使用StringBuilder
本身以及下面给出的解析逻辑来生成所需的字符串。 只要确保您在任何循环之外定义StringBuilder
。
要么
您可以获取地图Map<String, String> data = new HashMap<>();
并按要求的键/值填充它。 这样您就可以通过其他方法将其提取出来。
现在,对于每一行,您可以
String[] tokens = line.trim().split(":");
if(tokens.length >= 2){
data.put(tokens[0].trim(), tokens[1].trim());
// or append to stringbuilder
}
此外,您还可以在此处为仅要放入地图的特定令牌(密钥)进行支票检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.