如何从文件中获取特定行(两个部分之间)?

时间:2018-04-18 04:36:09

标签: java

我尝试使用Java 8读取两个部分之间的特定行。

我需要在~CURVE INFORMATION~PARAMETER INFORMATION

之间获取信息

我能够通过检查startsWith()equals并使用某些stringbuilder或集合中的行来存储它。但是有没有方法可以在某些部分之间获得一些特定的线。

我正在查看以下问题以供参考。

How to read specific parts of a .txt file in JAVA

How to read specific parts of the text file using Java

来自档案的示例数据:

~WELL INFORMATION
#MNEM.UNIT      DATA TYPE    INFORMATION
#----------   ------------   ------------------------------
 STRT.FT        5560.0000:   START DEPTH
 STOP.FT       16769.5000:   STOP DEPTH
 STEP.FT           0.5000:   STEP LENGTH
 NULL.          -999.2500:   NULL VALUE
 COMP.              SHELL:   COMPANY
~CURVE INFORMATION
#MNEM.UNIT       API CODE    CURVE DESCRIPTION
#----------   ------------   ------------------------------
 DEPT.F                  :   
 SEWP.OHMM   99 000 00 00:   
 SEMP.OHMM   99 120 00 00:   
 SEDP.OHMM   99 120 00 00:   
 SESP.OHMM   99 220 01 00:   
 SGRC.GAPI   99 310 01 00:   
 SROP.FT/HR  99 000 00 00:   
 SBDC.G/C3   45 350 01 00:   
 SCOR.G/C3   99 365 01 00:   
 SPSF.DEC    99 890 03 00:   
~PARAMETER INFORMATION
#MNEM.UNIT          VALUE    DESCRIPTION
#----------   ------------   ------------------------------
 RMF .OHMM              -:   RMF
 MFST.F                 -:   RMF MEAS. TEMP.
 RMC .OHMM              -:   RMC
 MCST.F                 -:   RMC MEAS. TEMP.
 MFSS.                  -:   SOURCE RMF.
 MCSS.                  -:   SOURCE RMC.
 WITN.             MILLER:   WITNESSED BY
~OTHER INFORMATION

1 个答案:

答案 0 :(得分:1)

使用Java9,您可以优雅地使用流

 public static void main(String[] args) {
    try (Stream<String> stream = Files.lines(Paths.get(args[0]))) {

        System.out.println(stream.dropWhile(string -> !"~CURVE INFORMATION".equals(string)).takeWhile( string -> !"~PARAMETER INFORMATION".equals(string)).skip(1).collect(Collectors.joining("\n")));

    } catch (IOException e) {
        e.printStackTrace();
    }
}

令人满意的是流的声明性,你的字面编写代码表示直到开始标记然后删除元素直到结束标记并使用“\ n”连接它们! Java9添加了takeWhile和dropWhile,我相信你可以实现它们或从java 8的库中获取它们的实现。当然这只是实现最初目标的另一种方法。