如何读取 Java 中的分隔文本文件?
How to read a Delimited Text file in Java?
我们有来自 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 可能更复杂?)
经过这么多的反省我会使用
http://fixedformat4j.ancientprogramming.com/usage/index.html
您可以使用 camel-bindy 固定长度记录(https://camel.apache.org/components/latest/bindy-dataformat.html#_4_fixedlengthrecord)
所以你的 class 会像:
@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 对象。
以上 link 中有更多详细信息。
希望对您有所帮助!
我们有来自 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 可能更复杂?)
经过这么多的反省我会使用
http://fixedformat4j.ancientprogramming.com/usage/index.html
您可以使用 camel-bindy 固定长度记录(https://camel.apache.org/components/latest/bindy-dataformat.html#_4_fixedlengthrecord)
所以你的 class 会像:
@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 对象。
以上 link 中有更多详细信息。
希望对您有所帮助!