版权声明:本文为博主原创文章,转载复制标题加链接即可√ https://blog.csdn.net/qazcxh/article/details/77019503
后缀名为.dbf的文件是来源于数据库,是数据库保存数据的一种方式。在java的开源库中,javadbf开源库,是专门用来读写dbf文件的工具。
【开发环境】
1、java开发工具,jdk-8u144-windows-x64.exe。
2、IDE环境,eclipse-jee-neon-2-win32-x86_64,
3、javadbf三方包 javadbf-1.5.0.jar,javadbf包开放源代码
4、代码库,GitHub仓库。
以上为windows环境,linux环境请联系博主,或自行搜索下载。
【开发流程】
1、javadbf包有两个主要的类,DBFWriter和DBFReader,从名字可以知道,一个是用来将java中生成的数据写入dbf文件的类,另一个一个则是从dbf文件中读到java程序中的类。
2、DBFField类,主要是用来存放列名、列名的数据类型,来方便java中的数据类型与dbf中的数据类型作比较。
3、DBFDataType类,存放dbf数据的数据类型包含有很多种,对应数据库中的数据类型,有以下几种
UNKNOWN
CHARACTER
VARCHAR
VARBINARY
DATE
FLOATING_POINT
DOUBLE
LOGICAL
MEMO
BINARY
BLOB
GENERAL_OLE
PICTURE
NUMERIC
LONG
AUTOINCREMENT
CURRENCY
TIMESTAMP
TIMESTAMP_DBASE7
NULL_FLAGS
4、DBFWriter类中的addField()方法,目前只支持四种种数据类型,其中数字型包含整型和浮点型,即java中的long,int,short,double,float等。
CHARACTER字符型,DATE日期型,NUMERIC和FLOATING_POINT数字型,LOGICAL布尔型
5、DBFReader类中的getField()方法,则支持DBFDataType类的多种类型读取。nextRecord()方法,类似于Result.next()方法,用于读取下一条记录。
【开发代码】
//DbfFileRAndW.java
package dbfFileRAndW;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import com.linuxense.javadbf.DBFDataType;
import com.linuxense.javadbf.DBFException;
import com.linuxense.javadbf.DBFField;
import com.linuxense.javadbf.DBFReader;
import com.linuxense.javadbf.DBFUtils;
import com.linuxense.javadbf.DBFWriter;
public class DbfFileRAndW {
public static void main(String[] args) {
DbfFileRAndW dbfFileRAndW = new DbfFileRAndW();
try {
dbfFileRAndW.testWriteAndReadAgain();
} catch (DBFException | IOException e) {
e.printStackTrace();
}
}
public void testWriteAndReadAgain() throws DBFException, IOException {
// let us create field definitions first
// we will go for 3 fields
//
DBFField fields[] = new DBFField[3];
fields[0] = new DBFField();
fields[0].setName("emp_code");
fields[0].setType(DBFDataType.CHARACTER);
fields[0].setLength(10);
fields[1] = new DBFField();
fields[1].setName("emp_name");
fields[1].setType(DBFDataType.CHARACTER);
fields[1].setLength(20);
fields[2] = new DBFField();
fields[2].setName("salary");
fields[2].setType(DBFDataType.NUMERIC);
fields[2].setLength(12);
fields[2].setDecimalCount(2);
DBFWriter writer = null;
DBFReader reader = null;
FileInputStream fis = null;
FileOutputStream fos = null;
File f = new File("d:/emp.dbf");
f.createNewFile();
try {
// 开始写
fos = new FileOutputStream(f);
writer = new DBFWriter(fos);
writer.setFields(fields);
// now populate DBFWriter
//
Object rowData[] = new Object[3];
rowData[0] = "1000";
rowData[1] = "John";
rowData[2] = new Double(5000.00);
writer.addRecord(rowData);
rowData = new Object[3];
rowData[0] = "1001";
rowData[1] = "Lalit";
rowData[2] = new Double(3400.00);
writer.addRecord(rowData);
rowData = new Object[3];
rowData[0] = "1002";
rowData[1] = "Rohit";
rowData[2] = new Double(7350.00);
writer.addRecord(rowData);
DBFUtils.close(writer);
System.out.println("The dbf file product success!");
// 开始读
fis = new FileInputStream(f);
reader = new DBFReader(fis);
Object[] objects = null;
for (; (objects = reader.nextRecord()) != null;) {
System.out.println(Arrays.toString(objects));
}
DBFUtils.close(reader);
} finally {
DBFUtils.close(reader);
DBFUtils.close(writer);
}
}
}