Как прочитать текстовый файл с разделителями в Java? - PullRequest
1 голос
/ 30 января 2020

У нас есть следующий SEQ-файл из SFTP:

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 Верблюд, но я думаю, что верблюд может быть сложным по сравнению с любой простой библиотекой?)

Ответы [ 2 ]

0 голосов
/ 30 января 2020

Вы можете использовать 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 объект.

Более подробная информация находится по ссылке выше.

Надеюсь, это поможет!

0 голосов
/ 30 января 2020

После стольких интроспекций я буду использовать

http://fixedformat4j.ancientprogramming.com/usage/index.html

...