繁体   English   中英

如何使用Java从txt文件读取/获取一些特定信息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM