fcoury / jfilehelpers

JFileHelpers is a library that automates the tedious task of parsing and creating structured text files. It handles fixed width or delimited files with Java annotations sweetness.

This URL has Read+Write access

name age message
file .classpath Tue Oct 16 15:58:36 -0700 2007 Exported back to false. git-svn-id: https://jf... [fcoury]
file .project Fri Sep 28 17:12:03 -0700 2007 First alpha release submission git-svn-id: htt... [fcoury]
directory .settings/ Tue Jun 17 17:44:43 -0700 2008 ADDED: Support for fixedMode on FixedLengthReco... [fcoury]
file README.md Sun Feb 15 19:24:42 -0800 2009 Added README.md [fcoury]
directory Resources/ Tue Jun 17 17:44:43 -0700 2008 ADDED: Support for fixedMode on FixedLengthReco... [fcoury]
directory Samples/ Tue Oct 21 10:02:50 -0700 2008 ADDED: MasterDetailsEngine.writeFile() override... [fcoury]
directory Source/ Tue Oct 21 10:02:50 -0700 2008 ADDED: MasterDetailsEngine.writeFile() override... [fcoury]
directory Tests/ Tue Jun 17 22:44:56 -0700 2008 FIXED: File headers git-svn-id: https://jfileh... [fcoury]
file build.xml Tue Jun 17 23:16:04 -0700 2008 ADDED: Compilation of the sources, for automate... [fcoury]
file hs_err_pid3776.log Fri Sep 28 17:12:03 -0700 2007 First alpha release submission git-svn-id: htt... [fcoury]
file jfilehelpers.jardesc Fri Sep 28 17:12:03 -0700 2007 First alpha release submission git-svn-id: htt... [fcoury]
directory lib/ Fri Sep 28 17:12:03 -0700 2007 First alpha release submission git-svn-id: htt... [fcoury]
file port-differences.txt Sun Oct 07 18:45:31 -0700 2007 Documentation of differences found on Java port... [fcoury]
README.md

What is JFileHelpers?

Chances are every programmer will end up having to manipulate structured text files at any point in his career. Those files are called flat files and, until now, you had to go through that same boring script to work with them. You had to open the file, create a reader, then start reading and parsing line by line. No more.

JFileHelpers is a library that automates the tedious task of parsing and creating structured text files. It handles fixed width or delimited files with Java annotations sweetness.

JFileHelpers started as a port of the awesome Marcos Meli's FileHelpers but it's starting to take its own path and we are in need of passinate developers who would like to give us a hand.

Go ahead and try it out! Download it now:

We just opened our forum to support our users and announce new features. Log in and tell us if you have any questions or comments!

So what's code like?

Let's take, for instance, a fixed length structured text file, that handles customer data (you can see the ever-growing list of examples as well).

Here's how our bean should be:

@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 stockSimbol;    
}  

This could would handle a text file structured like this:

....|....1....|....2....|....3....|....4                
1   Antonio Pereira     10012-12-1978ABC
2   Felipe Coury          201-01-2007
3   Anderson Polga       4212-11-2007DEF

And reading that file is as easy as:

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

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

This way, you can manipulate any properties of the beans contained on the ArrayList collection and eventually, even recreate a file with same format, also as easy as:

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

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

// retrieves customer 3 - Anderson Polga  
Customer c = customers.get(2);  
// changes a couple of properties  
c.rating = 82;  
c.stockSimbol = "APR";  

// and removes first customer - Antonio Pereira  
customers.remove(0);  

// writes the output file  
engine.writeFile("customers-fixed-out.txt", customers);  

As you may have already anticipated, the output file will look like this:

....|....1....|....2....|....3....|....4                
   2        Felipe Coury  201-01-2007   
   3      Anderson Polga 8212-11-2007APR