【问题标题】:How to read a Delimited Text file in Java?如何在 Java 中读取分隔文本文件?
【发布时间】:2020-05-15 16:54:28
【问题描述】:

我们有以下来自 SFTP 的 SEQ 文件:

TSID ,D4 ; TEST ID # (PRIMARY)
TSNAME,A15 ; TEST NAME COMMON (ALTERNATE)
TSRNAM ,A15 ; PORT NAME
TSRELO ,A5 ; TEST REPEAT LOW VALUE
TSREHI ,A5 ; TEST REPEAT HIGH VALUE
TSSSRQ ,D2 ; SAMPLE SIZE REQ.
TSCTYP ,D2 ; CONTAINER TYPE
TSSUOM,A6 ; SAMPLE UNIT OF MEAS
TSINDX ,D4 ; WIDE REPORTING INDEX (ALTERNATE)
TSWKLF ,D2 ; WORKLIST FORMAT
TSMCCD,A8 ; MEDICARE CODE + MODIFIER 1 (ALTERNATE)
TSTADY ,D3 ; RESULT TURN-AROUND TIME IN DAYS
TSENOR ,A1 ; TEST HAS EXPANDED NORMALS Y/N
TSSRPT ,A1 ; ELIGIBLE FOR STATE NOTIFICATION REPORT Y/N
TSPLAB ,D2 ; SENDOUT LAB 

文件的内容是简单的文本,例如:

0001MONTH COMPOSITE                                     12319909110940                                                                                                                                MONTH COMPOSITE                                     
0002MONTHLY CAPD                                        12319909120944                                                                                                                                MONTHLY CAPD                                        
0003CAPD MONTHLY LS                                     123199100110021004100510081010101210151016101811620944105917931794                                                                            CAPD MONTHLY LS                                     
0004CCPD MONTHLY LS                                     12319910011002100410051007100810101012101510161018116209400942105917931794                                                                    CCPD MONTHLY LS                                     
0005HD MONTHLY LS                                       1231991001100210041005100710081010101210151016101809400942105917931794                                                                        HD MONTHLY LS                                       

是否有任何 Java 内部包(或第三方 Java 库)可用于读取文件分隔文件 (.SEQ),以便使用某种转换器直接将每个值分配给 POJO?

例如:

public class ra(){
  @SomethigLength (0,4)
  private String tsId;
  @SomethigLength (4,15)
  private String tsName;
}

(注意我们在这里使用的是 Apache Camel,但我认为与任何简单的库相比,camel 可能会很复杂?)

【问题讨论】:

标签: java apache-camel transformation mapper csv


【解决方案1】:

【讨论】:

    【解决方案2】:

    您可以将 camel-bindy 与固定长度记录一起使用 (https://camel.apache.org/components/latest/bindy-dataformat.html#_4_fixedlengthrecord)

    所以你的班级会是这样的:

        @FixedLengthRecord(length = 15, paddingChar = ' ')
        public class Fastbox {
    
            @DataField(pos = 1, length = 4, align = "L")
            private String tsId; 
    
            @DataField(pos = 2, length = 11, align = "L")
            private String tsName; 
        }
    

    并且使用 unmarshal() 您可以将文件转换为 Java 对象。

    更多细节在上面的链接中。

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      • 2023-03-31
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2016-05-31
      相关资源
      最近更新 更多