基于javadbf-0.4.0版本修改支持中文读写
javadbf-0.4.0版本本已增加setCharactersetName方法支持中文读写,但在写入时会发生写入中文数据丢失问题。资源压缩文件包含有修改后的jar文件和读写测试类。
@Test
public void testWrite1(){
File file=new File(this.folder, "测试数据.DBF");
OutputStream fos = null;
try {
// 定义DBF文件字段
DBFField[] fields = new DBFField[3];
// 分别定义各个字段信息,setFieldName和setName作用相同,
// 只是setFieldName已经不建议使用
fields[0] = new DBFField();
// fields[0].setFieldName("emp_code");
fields[0].setName("semp_code");
fields[0].setDataType(DBFField.FIELD_TYPE_C);
fields[0].setFieldLength(10);
fields[1] = new DBFField();
// fields[1].setFieldName("emp_name");
fields[1].setName("emp_name");
fields[1].setDataType(DBFField.FIELD_TYPE_C);
fields[1].setFieldLength(200);
fields[2] = new DBFField();
// fields[2].setFieldName("salary");
fields[2].setName("salary");
fields[2].setDataType(DBFField.FIELD_TYPE_N);
fields[2].setFieldLength(12);
fields[2].setDecimalCount(2);
// DBFWriter writer = new DBFWriter(new File(path));
// 定义DBFWriter实例用来写DBF文件
DBFWriter writer = new DBFWriter();
writer.setCharactersetName("GBK");
// 把字段信息写入DBFWriter实例,即定义表结构
writer.setFields(fields);
// 一条条的写入记录
Object[] rowData = new Object[3];
rowData[0] = "1000234567";
// "中文";// -42 -48 -50 -60
rowData[1] = "中文";
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);
// 定义输出流,并关联的一个文件
fos = new FileOutputStream(file);
// 写入数据
/*
* 注意:writer.addRecord(rowData)时并不真正写入数据,在最后writer.write(fos)时才会把数据写入DBF文件,之前addRecord的数据暂时存放在内存中。如果数据量过大,这种方式显然不适合.
*/
writer.write(fos);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (Exception e) {
}
}
}
/**
* JavaDBF提供的另外一种机制:Sync Mode(同步模式)解决数据量过大这个问题
*/
@Test
public void testWrite2(){
File file=new File(this.folder, "测试数据.DBF");
DBFWriter writer = null;
try {
if(file.exists()){
file.delete();
}
// 定义DBF文件字段
DBFField[] fields = new DBFField[3];
// 分别定义各个字段信息,setFieldName和setName作用相同,
// 只是setFieldName已经不建议使用
fields[0] = new DBFField();
// fields[0].setFieldName("emp_code");
fields[0].setName("semp_code");
fields[0].setDataType(DBFField.FIELD_TYPE_C);
fields[0].setFieldLength(10);
fields[1] = new DBFField();
// fields[1].setFieldName("emp_name");
fields[1].setName("emp_name");
fields[1].setDataType(DBFField.FIELD_TYPE_C);
fields[1].setFieldLength(200);
fields[2] = new DBFField();
// fields[2].setFieldName("salary");
fields[2].setName("salary");
fields[2].setDataType(DBFField.FIELD_TYPE_N);
fields[2].setFieldLength(12);
fields[2].setDecimalCount(2);
// DBFWriter writer = new DBFWriter(new File(path));
// 定义DBFWriter实例用来写DBF文件
writer = new DBFWriter(file);
writer.setCharactersetName("GBK");
// 把字段信息写入DBFWriter实例,即定义表结构
writer.setFields(fields);
// 一条条的写入记录
Object[] rowData = new Object[3];
rowData[0] = "1000234567";
rowData[1] = "中文1";
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);
} catch (Exception e) {
e.printStackTrace();
} finally {
if(writer!=null){
try {
writer.write();
} catch (Exception e) {}
}
}
}
netbeans教程
The NetBeans IDE has really come a long way in the last few years. Since the first book was written, NetBeans has progressed from a tool with promise (from a small, young company in the Czech Republic) to one of the market leaders in the open source IDE tools space. It's been like watching a child grow and mature over the years and blossom in ways you could have never predicted.