注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

山林客

简单不一定幸福,但幸福其实可以很简单。

 
 
 

日志

 
 
关于我

2004年毕业于中山大学,毕业后专注于网站开发和网络工程技术。先后取得SCWCD、CCNP认证,对Asp/Java有丰富的开发经验,对网络工程也有较深的研究。真诚欢迎大家多多指教、多多指点、多多指正,共同分享IT道路和人生道路上的喜怒哀乐。

将txt文件转换为dbf文件  

2011-03-08 23:18:30|  分类: JavaEE |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

现在几乎每天都会收到纳税人关于普通发票管理系统、机动车开票系统的咨询,前者在广东省内、后者在全国范围内,用户可谓成千上万,不过说到这两个软件的设计,本人实在是不敢恭维。且不谈其安全性低、易用性差,光是各种各样的BUG,就让我十分头疼。

最近分局在对机动车发票数据进行采集的时候,发现导入的数据中,发票金额都是不含税的金额,而CTAIS系统要求的都是含税的,再仔细分析,发现是普通发票管理系统对机动车开票系统的数据进行转换的时候出了问题,如果是使用机动车开票系统旧版本(v2.0)的纳税人则不会有问题,而使用v2.1的则有这种情况。可怜了前台验旧岗的人员,本来只需要直接导入数据就OK了,现在则要逐份录入数据,而且还容易录错。于是紧急写了一个转换页面,供前台人员使用。主要作用是从备份文件(.txt)中读取数据并转换为符合CTAIS格式的文件(.dbf)

 package panyu.web.action;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.Calendar;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.StrutsStatics;

import panyu.web.util.FlowConfig;

import com.linuxense.javadbf.DBFField;
import com.linuxense.javadbf.DBFWriter;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport {
 private String uploadDir = "upload";
 private File upload;
 private String uploadContentType;
 private String uploadFileName;

 public String execute() throws Exception {
  uploadDir = FlowConfig.get("upload.dir");

  ServletContext context = (ServletContext) ActionContext.getContext()
    .get(StrutsStatics.SERVLET_CONTEXT);
  String realPath = context.getRealPath(uploadDir);

  String contextPath = context.getRealPath("/");

  String relativeDir = realPath.substring(contextPath.length());

  String fName = getUploadFileName();
  int index = fName.lastIndexOf(".");
  String ext = fName.substring(index);
  String rand = String.valueOf((int) Math.random() * 10000);
  Calendar cal = Calendar.getInstance();
  String name = "" + cal.get(Calendar.YEAR) + cal.get(Calendar.MONDAY)
    + cal.get(Calendar.DATE) + cal.get(Calendar.HOUR)
    + cal.get(Calendar.MINUTE) + cal.get(Calendar.SECOND) + rand
    + ext;
  String fileName = FlowConfig.get("site.contextPath") + relativeDir
    + "/" + name;

  FileOutputStream fos = new FileOutputStream(realPath + "\\" + name);
  FileInputStream fis = new FileInputStream(getUpload());
  byte[] buffer = new byte[1024];
  int length = 0;
  while ((length = fis.read(buffer)) > 0) {
   fos.write(buffer, 0, length);
  }

  HttpServletRequest request = (HttpServletRequest) ActionContext
    .getContext().get(StrutsStatics.HTTP_REQUEST);

  BufferedReader bfReader = new BufferedReader(new FileReader(realPath
    + "\\" + name));

  String line = null;
  boolean flag = false;

  DBFField[] fields = new DBFField[6];
  fields[0] = new DBFField();
  fields[0].setName("FPDM");
  fields[0].setDataType(DBFField.FIELD_TYPE_C);
  fields[0].setFieldLength(25);
  fields[1] = new DBFField();
  fields[1].setName("FPHM");
  fields[1].setDataType(DBFField.FIELD_TYPE_C);
  fields[1].setFieldLength(25);
  fields[2] = new DBFField();
  fields[2].setName("FPJE");
  fields[2].setDataType(DBFField.FIELD_TYPE_C);
  fields[2].setFieldLength(25);
  fields[3] = new DBFField();
  fields[3].setName("KPRQ");
  fields[3].setDataType(DBFField.FIELD_TYPE_C);
  fields[3].setFieldLength(25);
  fields[4] = new DBFField();
  fields[4].setName("JM");
  fields[4].setDataType(DBFField.FIELD_TYPE_C);
  fields[4].setFieldLength(25);
  fields[5] = new DBFField();
  fields[5].setName("FLAG");
  fields[5].setDataType(DBFField.FIELD_TYPE_C);
  fields[5].setFieldLength(1);
  DBFWriter writer = new DBFWriter();
  writer.setFields(fields);

  while ((line = bfReader.readLine()) != null) {
   String[] arr = line.split("\\t");
   if (!flag) {
    
    String test = arr[3];
    try {
     Double.parseDouble(test);
    } catch (NumberFormatException e) {
     flag = false;
     break;
    }
    flag = true;
   }
   Object rowData[] = new Object[6];
   rowData[0] = arr[1];
   rowData[1] = arr[2];
   rowData[2] = arr[6];
   rowData[3] = arr[0].split("\\s")[0];
   rowData[4] = "";
   rowData[5] = "1";
   writer.addRecord(rowData);
  }
  if (flag) {
   FileOutputStream fos1 = new FileOutputStream(
     (realPath + "\\" + name).replace(".txt", ".dbf"));
   writer.write(fos1);
   fos1.close();

   request.setAttribute("message", "<a href=\""
     + fileName.replace(".txt", ".dbf")
     + "\">转换成功,请点击这里下载转换后的文件并导入到CTAIS验旧模块</a>");
  } else
   request.setAttribute("message", "转换失败,备份文件格式不是机动车开票系统v2.1版本");
  return SUCCESS;

 }

 public File getUpload() {
  return upload;
 }

 public void setUpload(File upload) {
  this.upload = upload;
 }

 public String getUploadContentType() {
  return uploadContentType;
 }

 public void setUploadContentType(String uploadContentType) {
  this.uploadContentType = uploadContentType;
 }

 public String getUploadFileName() {
  return uploadFileName;
 }

 public void setUploadFileName(String uploadFileName) {
  this.uploadFileName = uploadFileName;
 }

 public void setUploadDir(String uploadDir) {
  this.uploadDir = uploadDir;
 }

}

  评论这张
 
阅读(2440)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018