Java utility to read/write DBF files
Fix issue #5 - don't load DBF and MEMO files into memory when reading it (thanks to Eugene Michuk for noticing this!)
Fix issue #9 - don't define some DBF file types correctly (thanks to l1feh4ck3r!!)
Fix issue #7 - add DbfRecord.isDeleted() method that checks if record is deleted.
Fix issue #3 - read the last record two times for "FoxBASE+/Dbase III plus" files
Fix issue #4 - incorrect parsing of update date in DBF header for "FoxBASE+/Dbase III plus" files
Add ability to read MEMO files (tested with Visual FoxPro DBFs)
Piece of code that reads file from classpath. Single DBF record is represented here as a Map.
public void readDBF() throws IOException, ParseException {
Charset stringCharset = Charset.forName("Cp866");
InputStream dbf = getClass().getClassLoader().getResourceAsStream("data1/gds_im.dbf");
DbfRecord rec;
try (DbfReader reader = new DbfReader(dbf)) {
DbfMetadata meta = reader.getMetadata();
System.out.println("Read DBF Metadata: " + meta);
while ((rec = reader.read()) != null) {
rec.setStringCharset(stringCharset);
System.out.println("Record #" + rec.getRecordNumber() + ": " + rec.toMap());
}
}
}
Piece of code that reads DBF and MEMO fields.
See TestMemo.java
public void test1() {
Charset stringCharset = Charset.forName("cp1252");
InputStream dbf = getClass().getClassLoader().getResourceAsStream("memo1/texto.dbf");
InputStream memo = getClass().getClassLoader().getResourceAsStream("memo1/texto.fpt");
try (DbfReader reader = new DbfReader(dbf, memo)) {
DbfMetadata meta = reader.getMetadata();
System.out.println("Read DBF Metadata: " + meta);
DbfRecord rec;
while ((rec = reader.read()) != null) {
rec.setStringCharset(stringCharset);
System.out.println("TEXVER: " + rec.getString("TEXVER"));
// this reads MEMO field
System.out.println("TEXTEX: " + rec.getMemoAsString("TEXTEX"));
System.out.println("TEXDAT: " + rec.getDate("TEXDAT"));
System.out.println("TEXSTA: " + rec.getString("TEXSTA"));
System.out.println("TEXCAM: " + rec.getString("TEXCAM"));
System.out.println("++++++++++++++++++++++++++++++++++");
}
} catch (IOException e) {
//e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}