Dbf文件操作
package cn.com.szhtkj.util;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.naming.NamingException;
import org.apache.commons.beanutils.PropertyUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.linuxense.javadbf.DBFField;
import com.linuxense.javadbf.DBFWriter;
import cn.com.szhtkj.dto.SjxmDtoOutput;
public class ExportDbf {
private static final String CHARSET = "GBK";
// private static File dataFile;
private final static int records = 2000;
/**
* 写入文件
* @param beans
* @param propertys
* @return
* @throws DocumentException
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws NoSuchMethodException
* @throws IOException
*/
public static String writeDbf(List<?> beans, String templateName,String dbfName) throws DocumentException,
IllegalAccessException, InvocationTargetException, NoSuchMethodException,
IOException {
try {
List<?> propertys = readTemplate(templateName);
DBFWriter writer = new DBFWriter(new File(dbfName));
writer.setCharactersetName(CHARSET);
writer.setFields(writeFields(propertys));
for (int i = 0; i < beans.size(); i++) {
writer.addRecord(writeLine(beans.get(i), propertys));
}
writer.write();
return "succ";
} catch (Exception e) {
e.printStackTrace();
return "error";
}
}
/**
* 写入文件
* @param beans
* @param propertys
* @return 第一次写入dbf已经写入dbf表结构,所以不需要二次写入
* @throws DocumentException
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws NoSuchMethodException
* @throws IOException
*/
public static String writeDbf2(List<?> beans, String templateName,String dbfName) throws DocumentException,
IllegalAccessException, InvocationTargetException, NoSuchMethodException,
IOException {
try {
List<?> propertys = readTemplate(templateName);
DBFWriter writer = new DBFWriter(new File(dbfName));
writer.setCharactersetName(CHARSET);
writer.setFields(writeFields(propertys));
for (int i = 0; i < beans.size(); i++) {
writer.addRecord(writeLine(beans.get(i), propertys));
}
writer.write();
return "succ";
} catch (Exception e) {
e.printStackTrace();
return "error";
}
}
/**
* 读取配置文件
* @param filename
* @return
* @throws DocumentException
*/
private static List<?> readTemplate(String filename) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(filename);
return document.getRootElement().elements();
}
/**
* 解析dbf文件
* @param clazz
* @param propertys
* @param values
* @return
* @throws InstantiationException
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws NoSuchMethodException
*/
@SuppressWarnings("unused")
private static Object readLine(Class<?> clazz, List<?> propertys, Object[] values)
throws InstantiationException, IllegalAccessException, InvocationTargetException,
NoSuchMethodException {
Object bean = clazz.newInstance();
for (int i = 0; i < propertys.size(); i++) {
Element property = (Element) propertys.get(i);
Object value = values[i];
if (property.attributeValue("type").equals("C")) {
value = ((String) value).trim();
}
PropertyUtils.setProperty(bean, property.attributeValue("name"), value);
}
return bean;
}
/**
* 返回每行匹配配置xml的数�?
* @param bean
* @param propertys
* @return
* @throws IllegalAccessException
* @throws InvocationTargetException
* @throws NoSuchMethodException
*/
private static Object[] writeLine(Object bean, List<?> propertys)
throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Object[] row = new Object[propertys.size()];
for (int i = 0; i < propertys.size(); i++) {
Element element = (Element) propertys.get(i);
row[i] = PropertyUtils.getProperty(bean, element.attributeValue("name"));
}
return row;
}
/**
* 设置写入dbf文件字段类型
* @param propertys
* @return
*/
private static DBFField[] writeFields(List<?> propertys) {
DBFField[] fields = new DBFField[propertys.size()];
for (int i = 0; i < propertys.size(); i++) {
Element property = (Element) propertys.get(i);
fields[i] = new DBFField();
fields[i].setName(property.attributeValue("column"));
fields[i].setDataType((byte) property.attributeValue("type").charAt(0));
if (property.attributeValue("length") != null) {
fields[i].setFieldLength(Integer.parseInt(property.attributeValue("length")));
}
if (property.attributeValue("scale") != null) {
fields[i].setDecimalCount(Integer.parseInt(property.attributeValue("scale")));
}
}
return fields;
}
/**
* 启动程序方法
* @throws NamingException
* @throws SQLException
* @throws IOException
* @throws NoSuchMethodException
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws DocumentException
*/
@SuppressWarnings("static-access")
public static int setUp(String fcode, String xmlNameAndPath, List<SjxmDtoOutput> list) throws SQLException, NamingException, DocumentException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, IOException {
File file = new File(fcode);
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs();
}
if(file.exists()){
deleteFile(fcode);
}
String succ="";
ExportDbf ep=new ExportDbf();
//取得总记录数,进行分页处理
long count = list.size();
if(count >0){
long page = count / records;
if (count % records != 0 ) {
page = page + 1 ;
}
//开始行号,结束行号
long start = 1 , end = records;
//根据页数进行循环
List<SjxmDtoOutput> orders = new ArrayList<SjxmDtoOutput>();
for ( long j = 1 ; j <= page; j++) {
if(list.size() > 0){
for(int i=0;i<list.size();i++){
SjxmDtoOutput order = new SjxmDtoOutput();
order.setBmbh(list.get(i).getBmbh());
order.setBmmc(list.get(i).getBmmc()+" ");
order.setSjxmdm(list.get(i).getSjxmdm());
order.setXmbh(list.get(i).getXmbh());
order.setXmmc(list.get(i).getXmmc()+" ");
orders.add(order);
}
//调用生成dbf方法
if(j >1){
succ=ep.writeDbf2(orders, xmlNameAndPath,fcode);
orders.clear();
}else{
succ=ep.writeDbf(orders, xmlNameAndPath,fcode);
orders.clear();
}
}
start = end + 1 ;
end = end + records;
}
}
if(count == 0){
return 99;
}else if(succ.equals("succ")){
return 88;
}else{
return 66;
}
}
/**
*
* 删除
* @param sPath
* @return
*/
public static boolean deleteFile(String sPath) {
Boolean flag = false;
File file = new File(sPath);
// 路径为文件且不为空则进行删除
if (file.isFile() && file.exists()) {
file.delete();
flag = true;
}
return flag;
}
public static void main(String[] args) throws Exception {
// ExportDbf dbf=new ExportDbf();
// File xing=new File(System.getProperty("user.dir"));
// String x=xing.getPath().replace("\\", "\\\\");
// String cs1=x+"\\export.dbf";
// System.out.println(cs1);
// setUp(cs1);
}
}
Dbf文件操作的更多相关文章
- JAVA 操作 DBF 文件数据库
1.依赖夹包 javadbf-[].4.1.jar jconn3.jar 2.添加属性文件 jdbc.properties jdbc.driverClassName=com.sybase.jdbc3. ...
- oracle_一次移动数据库dbf文件的操作
oracle数据库的dbf路径下面磁盘不足,需要把原始路径下面的dbf文件移动到另外一个磁盘路径下, 具体的操作有四步. 1.把整个表空间offline. 2.copy原始路径下的dbf文件到新的路径 ...
- Java读取Level-1行情dbf文件极致优化(3)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- C#生成DBF文件
C# 生成DBF,无需注册Microsoft.Jet.OLEDB. namespace ConsoleApplication { class Program { static void Main(st ...
- JavaDBF:保存行情实时数据到DBF文件
JavaDBF.jar其实很早都不再更新了,在日新月异的科技圈算得上远古上神的jar包,早该身归混沌了. 但我们的项目要用到,因为之前做的大宗期货交易行情的分析文件依然是dbf文件,没有办法,还得用 ...
- 由于删除DBF文件报错 —— ORA-01033: ORACLE initialization or shutdown in progress
由于移动或删除DBF文件报错:ORA-01033: ORACLE initialization or shutdown in progress 原因:一般该类故障通常是由于移动文件而影响了数据库日 ...
- 《Java知识应用》Java读写DBF文件
1. 准备: Jar包下载:链接: https://pan.baidu.com/s/1Ikxx-vkw5vSDf9SBUQHBCw 提取码: 7h58 复制这段内容后打开百度网盘手机App,操作更方便 ...
- DBF 文件 ORACLE 数据库恢复
DBF 文件 ORACLE 数据库恢复 清·魏源<庸易通义>:"至道问学之有知无行,分温故为存心,知新为致知,而敦厚为存心,崇礼为致知,此皆百密一疏." 起因 在我们的 ...
- Oracle的dbf文件迁移
1.背景说明 在Oracle数据库中插入了1.5亿条数据, 并且创建了主键索引, 又插入了1.5亿条数据到另外一张表, 导致数据库表空间暴涨到28G, 由于根目录下只有50G的空间, 数据库文件所在磁 ...
随机推荐
- python模拟登陆知乎
---恢复内容开始--- 在完成前面的阶段的任务之后,我们现在已经能够尝试着去模拟登录一些网站了.在这里我们模拟登录一下知乎做一下实验.笔者在这里总共用了三天多的时间,下面给大家分享一下笔者是怎么一步 ...
- ES6之用let,const和用var来声明变量的区别
var(掌握) 不区分变量和常量 用var声明的变量都是变量,都是可变的,我们可以随便对它进行运算操作.这样当多个人进行同一个项目时,区分变量和常量会越来越难,一不小心就会把设计为常量的数据更改了 ...
- thinkphp 多个字段的不同关系的查询条件实现 .
tp的$map不同条件默认是 and ,如果要用or<><><><>如下 例如查询Stu表中年龄大于18,或者身高低于180cm的男性(1为男性),(例 ...
- jvm 垃圾回收概念和算法
1.概念 GC 中的垃圾,特指存在于内存中.不会再被使用的对象.垃圾回收有很多种算法,如引用计数法.复制算法.分代.分区的思想. 2.算法 1.引用计数法:对象被其他所引用时计数器加 1,而当引用失效 ...
- HDU 4314 Contest 2
可以知道,逃出的人中,最后一个应当是A+B最长的,这是很容易发现的.那么,最选逃出去的必定是A+B最短的.这符合最优. 于是,可以把各小矮人按A+B的和由大到小排序.定义DP[i][j]为i个人中逃出 ...
- mysql数据库连接工具类C3P0
package com.dl.network_flow.db; import java.sql.Connection; import java.sql.PreparedStatement; impor ...
- Light OJ 1317 Throwing Balls into the Baskets 概率DP
n个人 m个篮子 每一轮每一个人能够选m个篮子中一个扔球 扔中的概率都是p 求k轮后全部篮子里面球数量的期望值 依据全期望公式 进行一轮球数量的期望值为dp[1]*1+dp[2]*2+...+dp[ ...
- Asp.net动态页面静态化之初始NVelocity模板引擎
Asp.net动态页面静态化之初始NVelocity模板引擎 静态页面是网页的代码都在页面中,不须要运行asp,php,jsp,.net等程序生成client网页代码的网页,静态页面网址中一般不含&q ...
- ARIMA模型实例讲解——网络流量预测可以使用啊
ARIMA模型实例讲解:时间序列预测需要多少历史数据? from:https://www.leiphone.com/news/201704/6zgOPEjmlvMpfvaB.html 雷锋网按:本 ...
- zzulioj--1791-- 旋转矩阵(模拟水题)
旋转矩阵 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 268 Solved: 116 SubmitStatusWeb Board Descr ...