Skip to content
Java utility to read/write DBF files
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
data major refactoring Oct 2, 2012
src Remove unused import Jun 11, 2018
.gitignore fix compile error and ignoring the target folder Jan 28, 2018
.travis.yml test adding travis build script Feb 17, 2018 Add Travic-ci badge Jun 11, 2018
jdbf.iml Implemented missing field types Jan 4, 2017
pom.xml adding necessary changes to get this published to sonatype Feb 17, 2018


Join the chat at

JDBF builds at

Java utility to read/write DBF files

Version 2.1.0

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!!)

Version 2.0.2

Fix issue #7 - add DbfRecord.isDeleted() method that checks if record is deleted.

Version 2.0.1

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

Version 2.0

Add ability to read MEMO files (tested with Visual FoxPro DBFs)

Dependency Status

User Guide

Read DBF file

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 = != null) {
                System.out.println("Record #" + rec.getRecordNumber() + ": " + rec.toMap());

Read DBF file with MEMO fields

Piece of code that reads DBF and MEMO fields.


    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 = != null) {

                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"));

        } catch (IOException e) {
        } catch (ParseException e) {
You can’t perform that action at this time.