2009-08-18 10 views
6

Czy ktoś wie o dobrych bibliotekach do konwersji płaskiego pliku na obiekty Java? Znalazłem flatworm, ale szukam alternatyw.Konwersja płaskiego pliku na obiekty Java

+0

Jeśli jest coś takiego jak CSV (lub ograniczonego pliku) lub XML, to trywialne, aby przeczytać go i tworzyć obiekty z niego. Czy mógłbyś rozwinąć format pliku i to, co próbujesz zrobić? –

+4

Płaski plik to dość szeroka kategoria. Plik tekstowy? Plik CSV? Plik Serialized Object? Co jest w "płaskim pliku" – Gandalf

+0

Co jest nie tak z Flatwormem? –

Odpowiedz

1

Można również spróbować do Fixedformat4j. Podoba mi się podejście do adnotacji i bardzo łatwo jest zdefiniować niestandardowy format pola.

1

Chcesz rozważyć JRecordBind (jestem jego autorem)

W przeciwieństwie do innych, potrafi zarówno parsować, jak i tworzyć płaskie pliki i używa zwykłego schematu XML (więc nie musisz się uczyć kolejnej składni konfiguracji). Niektórzy użytkownicy przetwarzają ten sam XSD w celu generowania zarówno danych wyjściowych usługi sieciowej, jak i plików płaskich.

ps: Ja niedawno przeniósł kod do github

1

Nie używałem tego JFlat, ale wydaje się to ramowa zapewnia konwersję z płaskiego pliku do obiektu Java.

Podobnie BeanIO i Jsefa zapewnia również prosty i elastyczny interfejs API.

Można spróbować z FlatPack - ale to jest stary i docs nie są dobre jak JFlat lub BeanIO

Apache Camel posiada komponent FlatPack jak również z 2.10 ma BenaIO komponentu

2

Inną alternatywą, że pisałem, że używa Java adnotacje jest JFileHelpers - http://jfilehelpers.com

przykładem fasoli adnotacjami:

@FixedLengthRecord() 
public class Customer { 
    @FieldFixedLength(4) 
    public Integer custId; 

    @FieldAlign(alignMode=AlignMode.Right) 
    @FieldFixedLength(20) 
    public String name; 

    @FieldFixedLength(3) 
    public Integer rating; 

    @FieldTrim(trimMode=TrimMode.Right) 
    @FieldFixedLength(10) 
    @FieldConverter(converter = ConverterKind.Date, 
     format = "dd-MM-yyyy") 
    public Date addedDate; 

    @FieldFixedLength(3) 
    @FieldOptional 
    public String stockSymbol; 
} 

Następnie wszystko co musisz zrobić, to:

FileHelperEngine<Customer> engine = 
     new FileHelperEngine<Customer>(Customer.class); 
    List<Customer> customers = 
     new ArrayList<Customer>(); 

    customers = engine.readResource(
     "/samples/customers-fixed.txt");