java dbf导出_java导出dbf文件工具方法,通过反射提取字段和值。

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.math.BigDecimal;

import java.util.ArrayList;

import java.util.List;

import com.linuxense.javadbf.DBFField;

import com.linuxense.javadbf.DBFWriter;

/**

* 写入dbf

* @author zyf

*

*/

public class DbfUtil {

private static final String CHARSET = "GBK";

/**

* 写入文件

* @param beans

* @param propertys

* @return

* @throws DocumentException

* @throws IllegalAccessException

* @throws InvocationTargetException

* @throws NoSuchMethodException

* @throws IOException

*/

public static Boolean writeDbf(List beans,String dbfName) {

try {

OutputStream fos = null;

List propertys = writeLine(beans.get(0));

DBFWriter writer =new DBFWriter();

writer.setCharactersetName(CHARSET);

DBFField[] dbffs=writeFields(beans.get(0));

writer.setFields(dbffs);

for (int i = 0; i < beans.size(); i++) {

writer.addRecord(writeLine(beans.get(i),propertys));

}

fos = new FileOutputStream(dbfName);

writer.write(fos);

return true;

} catch (Exception e) {

e.printStackTrace();

return false;

}

}

/**

* 设置写入dbf文件字段类型

* @param propertys

* @return

*/

private static DBFField[] writeFields(List propertys) {

DBFField[] fields = new DBFField[propertys.size()];

for (int i = 0; i < propertys.size(); i++) {

char c='C';

String name=((String)propertys.get(i)).toUpperCase();

fields[i] = new DBFField();

fields[i].setName(name);

fields[i].setDataType((byte) c);

fields[i].setFieldLength(100);

}

return fields;

}

/**

* 设置写入dbf文件字段类型

* @param propertys

* @return

*/

private static DBFField[] writeFields(Object obj) {

java.lang.reflect.Field[]field=obj.getClass().getDeclaredFields();

DBFField[] fields = new DBFField[field.length];

int i=0;

for(java.lang.reflect.Field tempF:field){

String name=tempF.getName().toUpperCase();

fields[i] = new DBFField();

fields[i].setName(name);

if(tempF.getType().equals(BigDecimal.class)){

fields[i].setDataType(DBFField.FIELD_TYPE_N);

fields[i].setFieldLength(22);

fields[i].setDecimalCount(2);

}else{

fields[i].setFieldLength(100);

fields[i].setDataType(DBFField.FIELD_TYPE_C);

}

i++;

}

return fields;

}

/**

* 返回每行匹配配置xml的数?

* @param bean

* @param propertys

* @return

* @throws IllegalAccessException

* @throws InvocationTargetException

* @throws NoSuchMethodException

*/

private static Object[] writeLine(Object bean, List propertys)

throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {

List list=new ArrayList();

printObj(bean,list);

return list.toArray();

}

public static void printObj(Object obj, List list){

Method[] meth=obj.getClass().getMethods();

int i=0;

for(Method tempM:meth){

if(tempM.getName().indexOf("get")>-1&&tempM.getName().indexOf("getClass")==-1){

try {

Object objVaule=tempM.invoke(obj);

//objVaule=objVaule==null?new String(""):objVaule;

if(tempM.getReturnType().equals(BigDecimal.class)) {

BigDecimal bd = new BigDecimal(objVaule.toString());

list.add(bd.doubleValue());

} else {

list.add(objVaule);

}

i++;

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InvocationTargetException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

/**

* 返回每行匹配配置xml的数�?

* @param bean

* @param propertys

* @return

* @throws IllegalAccessException

* @throws InvocationTargetException

* @throws NoSuchMethodException

*/

public static List writeLine(Object obj){

List list=new ArrayList();

java.lang.reflect.Field[]field=obj.getClass().getDeclaredFields();

for(java.lang.reflect.Field tempF:field){

list.add(tempF.getName());

}

return list;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将一组List<Map>对象以dbf文件方式导出,可以使用JavaDBF库。可以先下载JavaDBF库的jar包,并将其添加到项目中。然后可以使用以下代码将List<Map>对象导出dbf文件: ```java import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.Charset; import java.util.List; import java.util.Map; import com.linuxense.javadbf.*; public class DBFWriter { public static void main(String[] args) { // List<Map>对象 List<Map<String, Object>> dataList = getDataList(); // dbf文件路径 String filePath = "example.dbf"; // 字段名数组 String[] fieldNames = getFieldNames(dataList); // 字段类型数组 DBFField[] fields = getFields(dataList); // 写入dbf文件 writeDBF(filePath, fieldNames, fields, dataList); } public static List<Map<String, Object>> getDataList() { // 从数据库或其他数据源获取数据 // 省略... return dataList; } public static String[] getFieldNames(List<Map<String, Object>> dataList) { // 获取字段名数组 String[] fieldNames = null; if (dataList != null && !dataList.isEmpty()) { Map<String, Object> data = dataList.get(0); fieldNames = new String[data.size()]; int i = 0; for (String fieldName : data.keySet()) { fieldNames[i++] = fieldName; } } return fieldNames; } public static DBFField[] getFields(List<Map<String, Object>> dataList) { // 获取字段类型数组 DBFField[] fields = null; if (dataList != null && !dataList.isEmpty()) { Map<String, Object> data = dataList.get(0); fields = new DBFField[data.size()]; int i = 0; for (String fieldName : data.keySet()) { Object value = data.get(fieldName); DBFField field = new DBFField(); field.setName(fieldName); if (value instanceof Integer) { field.setDataType(DBFField.FIELD_TYPE_N); field.setFieldLength(10); } else if (value instanceof Double) { field.setDataType(DBFField.FIELD_TYPE_F); field.setFieldLength(10); field.setDecimalCount(2); } else { field.setDataType(DBFField.FIELD_TYPE_C); field.setFieldLength(String.valueOf(value).getBytes().length); } fields[i++] = field; } } return fields; } public static void writeDBF(String filePath, String[] fieldNames, DBFField[] fields, List<Map<String, Object>> dataList) { DBFWriter writer = null; try { // 创建dbf文件 writer = new DBFWriter(new FileOutputStream(new File(filePath)), Charset.forName("GBK")); // 设置字段名和类型 writer.setFields(fields); // 写入每一条记录 for (Map<String, Object> data : dataList) { Object[] rowValues = new Object[fieldNames.length]; for (int i = 0; i < fieldNames.length; i++) { rowValues[i] = data.get(fieldNames[i]); } writer.addRecord(rowValues); } } catch (DBFException | IOException e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } } ``` 其中,getDataList()方法可以从数据库或其他数据源获取数据,getFieldNames()方法获取字段名数组,getFields()方法获取字段类型数组。通过遍历每条记录,将数据写入dbf文件中。最后生成的dbf文件名为example.dbf,可以根据实际情况修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值