java解析dbf文件

dbf文件, 不能直接另存为excel文件, 会丢数据! 需要将dbf数据存储到数据库中, 在从数据库中将数据导出成excel.

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.commons.lang.ObjectUtils;

import cn.com.wfc.db.ConnectionPool;

import com.linuxense.javadbf.DBFField;

import com.linuxense.javadbf.DBFReader;

/**

* java解析dbf文件,将数据导入数据库表,需要javadbf.4.1.jar包

@author LiChuntao

*/

public class JavaDBFReaderTest {

public static void main(String args[]) {

Connection conn = null;

PreparedStatement pstmt = null;

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

try {

InputStream inputStream = new FileInputStream(new File(

"F:/院校代码.dbf")); // take dbf file as program argument

DBFReader reader = new DBFReader(inputStream);

for (int i = 0; i < reader.getRecordCount(); i++) { // 所有记录行数

Object obj[] = reader.nextRecord();

Map<String, Object> map = new HashMap<String, Object>();

for (int j = 0; j < obj.length; j++) { // 一行中所有字段的数据

DBFField field = reader.getField(j);

map.put(field.getName(), ObjectUtils.defaultIfNull(obj[j], "").toString().trim()); // column和 value

}

list.add(map);

}

inputStream.close();

//将获取的数据入库

String sql = "insert into abcdefg(YXDM,YXMC,DM1,DM2,YXDH,YXSZDQDM,YXDZ,YXLSDM,BLS,YXLXR," +

"YXYZBM,FRHM,EMAIL,HTTP,YXFLDM,DZB)" +

" values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

conn = ConnectionPool.getConnection();

conn.setAutoCommit(false);

pstmt = conn.prepareStatement(sql);

for(int m=0;m<list.size();m++){

Map<String,Object> tempMap = list.get(m);

pstmt.setObject(1, tempMap.get("YXDM"));

pstmt.setObject(2, tempMap.get("YXMC"));

pstmt.setObject(3, tempMap.get("DM1"));

pstmt.setObject(4, tempMap.get("DM2"));

pstmt.setObject(5, tempMap.get("YXDH"));

pstmt.setObject(6, tempMap.get("YXSZDQDM"));

pstmt.setObject(7, tempMap.get("YXDZ"));

pstmt.setObject(8, tempMap.get("YXLSDM"));

pstmt.setObject(9, tempMap.get("BLS"));

pstmt.setObject(10, tempMap.get("YXLXR"));

pstmt.setObject(11, tempMap.get("YXYZBM"));

pstmt.setObject(12, tempMap.get("FRHM"));

pstmt.setObject(13, tempMap.get("EMAIL"));

pstmt.setObject(14, tempMap.get("HTTP"));

pstmt.setObject(15, tempMap.get("YXFLDM"));

pstmt.setObject(16, tempMap.get("DZB"));

pstmt.executeUpdate();

}

conn.commit();

System.out.println("success");

catch (Exception e) {

ConnectionPool.rollback(conn);

System.out.println(e.getMessage());

finally{

ConnectionPool.close(conn);

ConnectionPool.closePstmt(pstmt);

}

}

/**

* 导入dbf数据

* @param user

* @param xxid

* @param fileStream

* @param info

*/

public boolean importXxxxByDbf(Login user, String xxid, InputStream fileStream,

StringBuffer info) {

boolean importFlag = true;

Connection conn = null;

PreparedStatement pstmt = null;

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

List<String> cols = new ArrayList<String>();

try {

DBFReader reader = new DBFReader(fileStream);

//读取dbf中所有数据,并存入到list中

for (int i = 0; i < reader.getRecordCount(); i++) { // 所有记录行数

Object obj[] = reader.nextRecord();

Map<String, Object> map = new HashMap<String, Object>();

for (int j = 0; j < obj.length; j++) { // 一行中所有字段的数据

DBFField field = reader.getField(j);

map.put(field.getName(), ObjectUtils.defaultIfNull(obj[j], "").toString().trim()); // column和 value

}

list.add(map);

}

for(int c=0;c<reader.getFieldCount();c++){ //获取dbf中所有字段,用于生成sql

DBFField field = reader.getField(c);

cols.add(field.getName());

}

fileStream.close();

//向jy_bysxx_src表中添加记录

String inSql = this.createInsertSql(cols, "jy_bysxx_src");

conn = ConnectionPool.getConnection();

conn.setAutoCommit(false);

pstmt = conn.prepareStatement(inSql);

for(int m=0;m<list.size();m++){

Map<String, Object> map = list.get(m);

for(int n=0;n<cols.size();n++){

pstmt.setObject(n+1,map.get(cols));

}

pstmt.addBatch();

if(m%500==0){ //500条批量一次

pstmt.executeBatch();

}

}

if(list.size()%500!=0) pstmt.executeBatch(); //存在余数,则批量执行余数.

conn.commit();

} catch (Exception e) {

ConnectionPool.rollback(conn);

importFlag = false;

info.append(e.getMessage());

} finally{

ConnectionPool.close(conn);

ConnectionPool.closePstmt(pstmt);

}

return importFlag;

}

时间: 2024-10-03 13:46:11

java解析dbf文件的相关文章

java把dbf文件写入远程2003服务器

重要的事情说三遍,有木有,java把dbf文件写入远程2003服务器,第一遍,第二遍,第三遍-够了,王二,还有完没有,赶紧点 需求 今天早晨,王二(也就是我)接到一个需求: 把行情的dbf库写入到远程windows server2003上! 分析 之前,我就写过一篇Java操作DBF文件数据库,但怎么把dbf写入到远程服务器上,这好像需要点什么. 于是我就去问度娘啊,看看有没有什么封装好的jar包之类的,好拿来用用. 折腾了一会关键字,终于找到了一篇Java读写Windows共享文件夹,感谢博主

Java 解析chm文件实战(原创)

需求:java解析chm文件,并将内容插入数据库和redis. Java解析chm文件,网上除了github上有个家伙只言片语了一下,没有啥资料参考,包括chm4j这东西,没啥介绍,本着服务大众的精神,整理了下流程, 时间仓促,错误之处在所难免,望指正. 第一步:下载chm4j.jar以及依赖 http://sourceforge.net/projects/chm4j/ 第二步:新建java工程,建一个解析ParseChm类,建一个解析测试类,类似: ParseChm类: //下面的包,请导入c

Java解析XML文件的四种方法

[摘要] 可扩展标志语言(XML)在实现信息标准化.信息的交流与共享上有其独特的技术优势,因此受到了广泛的重视.本文先简单的介绍了XML基本知识,然后从XML应用入手总结了四种现今最常见的XML的解析方法,介绍了这四种方法的特点,其中包括优点与不足之处.最后给出了一个简单的案例来对这四种解析进行代码介绍. [关键字] XML文件,DOM,SAX,JDOM,DOM4J [引言] XML即可扩展标记语言(EXtensible Markup Language),是标准通用标记语言的子集,是一种用于标记

java解析xml文件并输出

使用java解析xml文件,通过dom4j,代码运行前需先导入dom4j架包. ParseXml类代码如下: import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class

java解析xml文件四种方式介绍、性能比较和基本使用方法

一.介绍: 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以在任何时候在树中上下导航,而不

java解析properties文件

在自动化测试过程中,经常会有一些公用的属性要配置,以便后面给脚本使用,我们可以选择xml, excel或者json格式来存贮这些数据,但其实java本身就提供了properties类来处理properties文件,虽然名字叫properties,其实打开它发现就是一个记事本的文件,所以看起来也比较直观,下面是解析properties文件的实现代码. properties文件里存贮的样子是这样的,然后给他保存为xxx.properties即可. gsBAMUserName1=automation_

java 解析 xml 文件

学习下解析 xml 文件,这里用到了 org.dom4j 这个 jar 包,使用 eclipse 没有这个包的小伙伴可以去下个 jar 包,然后复制到项目路径下,右键 jar 包后 build path,add build path 即可. 来引入相关依赖: import java.io.File; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Elem

Java 解析 IPA 文件,读取 Info.plist 信息

在做移动MDM功能的时候,就遇到了这样一个问题,当用户上传IPA文件时,我如何知道这个IPA文件的相关信息呢?IPA文件有一个很重要的文件Info.plist 就类似于Android程序的Manifest.xml,只要能够从IPA文件中提取出来Info.plist,然后在进行解析提起相关信息,那就马到成功了.那么,按照上面步骤开始了. 1.Java解压IPA文件,只获取 Info.plist /**  * 解压IPA文件,只获取IPA文件的Info.plist文件存储指定位置  * @param

java解析xml文件

为什么使用xml作为数据交换?为什么用java解析xml?为什么用dom4J解析xml?dom解析和sax解析到底有什么区别? 带着这样的问题去学习,你发现这样的学习是最高效的 首先第一个问题:为什么使用xml作为数据交换 首先xml是一种无平台限制,无语言限制,无系统限制.使得xml可以在不同语言写的系统进行数据的交换,不同语言写的系统之间需求是不会改变,可能xml这种传输数据的介质会被其他的替代.比如json,可能json也会面临被替代.方式改变.但是需求是不会改变的.而且xml树节点的结构