注册CSDN快六个月了,之前一直是看园子里的文章,或者碰到问题时,进来查点资料,今天终于决定写一篇自己在园子里的blog。

好吧,鉴于水平太菜,就只记录过程,其中原理啥的并不是很明晰,所以此blog只在记录,莫BS哈。

神马是CSV文件呢,看起来和excel文件很像,具体有神马不同,见这位圆友的blog哈,http://blog.csdn.net/luweifeng1983/article/details/3582657 。简单来说,本质是文本文件,但文件分多行,内容以“,”分割,系统默认是excel打开的一种文件。

好吧,我们以下面这个通讯录CSV文件为例。

name company mobile-phone address relationship
Lisa hp 18702341678 Wuhan classmates
Tony ibm 15809323145 Wuhan friends

下面开始转换过程的讲解喽。

1. 读取csv文件

1)Java操作csv文件有专门的的API叫javacsv.jar

下载地址如下:

http://sourceforge.net/project/showfiles.php?group_id=33066

2)自己项目中使用的工具是dataimport_3.3.0-rc1.jar

下载地址如下:

http://grepcode.com/snapshot/repo1.maven.org/maven2/net.sf.squirrel-sql.plugins/dataimport/3.3.0-rc1

读取示例代码:

//read csv file
            CsvReader cr = new CsvReader(new InputStreamReader(new FileInputStream(new File(filename)),
                                                              "UTF-8"));
            //read csv file headers
            cr.readHeaders();
           
            //read csvv file records

cr.readRecord();

2.将读取到的csv文件转换成xml格式

1)先确定自己要求替换完的xml数据的格式,假如如下图定义,可设置为资源文件,命名为addresslist.xml.

<?xml version="1.0" encoding="UTF-8"?>
<AddressList>
 <Person>
  <Name>@name@</Name>
  <Company>@company@</Company>
  <MobilePhone>@mobilephone@</MobilePhone>
  <Address>@address@</Address>
  <Relationship>@relationship@</Relationship>
    </Person>
</AddressList>

2)读取资源文件addresslist.xml。

String mapping = "addresslist.xml";

URL url = ConfigurationUtils.locate(mapping);
            SAXReader reader = new SAXReader();
            Document doc = reader.read(url);

3)完成替换(此步骤是将CSV文件中的数据记录按行替换资源文件中的占位符,生成xml消息)

//find Node "Name" in addresslist.xml
Element name = (Element) doc.selectSingleNode("/AddressList/Person/Name");
//read "name" from csv file and set value for Node "Name"
name.setText(cr.get("name"));
//find Node "Company" in addresslist.xml
Element company = (Element) doc.selectSingleNode("/AddressList/Person/Company");
//read "company" from csv file and set value for Node "Company"
company.setText(cr.get("company");
//find Node "MobilePhone" in addresslist.xml
Element mobilephone = (Element) doc.selectSingleNode("/AddressList/Person/MobilePhone");
//read "mobile-phone" from csv file and set value for Node "MobilePhone"
mobilephone.setText(cr.get("mobile-phone"));
//find Node "Address" in addresslist.xml
Element address = (Element) doc.selectSingleNode("/AddressList/Person/Address");
//read "address" from csv file and set value for Node "Address"
mobilephone.setText(cr.get("address"));
//find Node "RelationShip" in addresslist.xml
Element relationship = (Element) doc.selectSingleNode("/AddressList/Person/RelationShip");
//read "relationship" from csv file and set value for Node "RelationShip"
relationship.setText(cr.get("relationship"));

4)将xml消息转换成文本输出

String record= doc.asXML();

可配合while,循环转换csv文件中的三条记录。

完整的java code来了呢

 1 package demo.csv;
 2
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.IOException;
 7 import java.io.InputStreamReader;
 8 import java.io.UnsupportedEncodingException;
 9 import java.net.URL;
10 import java.util.ArrayList;
11 import java.util.Iterator;
12 import java.util.List;
13
14 import org.apache.commons.configuration.ConfigurationUtils;
15 import org.dom4j.Document;
16 import org.dom4j.Element;
17 import org.dom4j.io.SAXReader;
18
19 import com.csvreader.CsvReader;
20
21 public class CsvDemo {
22
23     private static List<String> transformCsv2Xml(String filename) {
24
25         String mapping = "src/demo/csv/address.xml";
26
27         List<String> messages = new ArrayList<String>();
28
29         try {
30             URL url = ConfigurationUtils.locate(mapping);
31             SAXReader reader = new SAXReader();
32             Document doc = reader.read(url);
33
34             //read csv file
35             CsvReader cr = new CsvReader(new InputStreamReader(new FileInputStream(new File(filename)),
36                                                               "UTF-8"));
37             //read csv file headers
38             cr.readHeaders();
39
40             //read csv file records
41             //cr.readRecord();
42             while (cr.readRecord()) {
43                 //find Node "Name" in addresslist.xml
44                 Element name = (Element) doc.selectSingleNode("/AddressList/Person/Name");
45                 //read "name" from csv file and set value for Node "Name"
46                 name.setText(cr.get("name").trim());
47                 //find Node "Company" in addresslist.xml
48                 Element company = (Element) doc.selectSingleNode("/AddressList/Person/Company");
49                 //read "company" from csv file and set value for Node "Company"
50                 company.setText(cr.get("company").trim());
51                 //find Node "MobilePhone" in addresslist.xml
52                 Element mobilephone = (Element) doc.selectSingleNode("/AddressList/Person/MobilePhone");
53                 //read "mobile-phone" from csv file and set value for Node "MobilePhone"
54                 mobilephone.setText(cr.get("mobile-phone").trim());
55                 //find Node "Address" in addresslist.xml
56                 Element address = (Element) doc.selectSingleNode("/AddressList/Person/Address");
57                 //read "address" from csv file and set value for Node "Address"
58                 address.setText(cr.get("address").trim());
59                 //find Node "RelationShip" in addresslist.xml
60                 Element relationship = (Element) doc.selectSingleNode("/AddressList/Person/Relationship");
61                 //read "relationship" from csv file and set value for Node "RelationShip"
62                 relationship.setText(cr.get("relationship").trim());
63                 // break;
64                  messages.add(doc.asXML());
65             }
66
67         } catch (UnsupportedEncodingException e) {
68
69         } catch (FileNotFoundException e) {
70
71         } catch (IOException e) {
72
73         } catch (Exception ex) {
74
75         }
76         return messages;
77     }
78
79
80     public static void main(String[] args) {
81
82         List<String> addresslist = transformCsv2Xml("src/demo/csv/data.csv");
83         Iterator<String> it = addresslist.iterator();
84         while(it.hasNext()){
85             System.out.println(it.next());
86         }
87
88     }
89
90 }

View Code

介绍完毕,,,虽然内容很少,但完整记录下来好费时间,可能是太菜,思路也不太清楚的原因吧,好吧,还是累屎姐了,不知道下一次下决心写会是神马时候。

2013-05-14

转载于:https://www.cnblogs.com/alvwood/archive/2013/05/14/3077079.html

java转换CSV文件生成xml格式数据相关推荐

  1. java 数据转成xml_java转换CSV文件生成xml格式数据

    注册CSDN快六个月了,之前一直是看园子里的文章,或者碰到问题时,进来查点资料,今天终于决定写一篇自己在园子里的blog. 好吧,鉴于水平太菜,就只记录过程,其中原理啥的并不是很明晰,所以此blog只 ...

  2. 使用PHP生成和获取XML格式数据

    生成XML格式数据 假设系统中有一张学生信息表student,需要提供给第三方调用,并有id,name,sex,age分别记录学生的姓名.性别.年龄等信息. CREATE TABLE 'student ...

  3. 【csv文件转xml文件】Excel表格数据快速批量生成xml格式文件

    使用背景: 使用场景举例:数据集标签处理 有时候我们需要将固定格式的Excel表格文件(csv文件)转换为xml文件使用,例如我们在目标检测实验当中我们需要制作数据集Pascal VOC格式的标签文件 ...

  4. java根据pdf模板生成指定格式的pdf文件

    java根据pdf模板生成指定格式的pdf文件 一.工具准备 事先得准备好Adobe Acrobat DC,这是一款专门编辑pdf的工具,小编已经给大家准备好了. 链接:https://pan.bai ...

  5. java导出csv文件乱码_记一次java生成csv文件乱码的解决过程 (GB2312编码)

    系统:win7 (格式:中文(简体,中国)) 工具:Eclipse (默认编码utf-8) 服务两个:[restful接口]  和 [服务*** server]. 场景:[服务*** server]多 ...

  6. python创建csv文件并写入-Python数据写入csv格式文件

    (只是传递,基础知识也是根基) Python读取数据,并存入Excel打开的CSV格式文件内! 这里需要用到bs4,csv,codecs,os模块. 废话不多说,直接写代码!该重要的内容都已经注释了, ...

  7. Xml 格式数据的生成和解析

    相关阅读 XML约束 Xml 格式数据的生成和解析 XML解析器 什么是XML XML全称为Extensible Markup Language, 意思是可扩展的标记语言,它是 SGML(标准通用标记 ...

  8. oracle生成xml格式化,介绍关于Oracle下存取XML格式数据的方式教程一览

    目前的程序设计和开发大多是面向对象的,所以用XML来表达数据可以让数据的处理和传播变得非常方便.为此,今天o5c小编一起与大家分享Oracle对XML格式数据的存取,由于在用XML存储数据的时候可能会 ...

  9. oracle xml文件是什么文件,介绍关于Oracle下存取XML格式数据的方式

    目前的程序设计和开发大多是面向对象的,所以用XML来表达数据可以让数据的处理和传播变得非常方便.为此,今天小编一起与大家分享Oracle对XML格式数据的存取,由于在用XML存储数据的时候可能会遇到点 ...

最新文章

  1. 关于WPF的ComboBox中Items太多而导致加载过慢的问题
  2. 今晚8点开播 | 思必驰NLP大牛带你系统学习启发式对话
  3. Java与C++的几个显著不同
  4. 为你的集成需求选择合适的ESB
  5. linux内核中分配4M以上大内存的方法
  6. HashMap TreeMap专题
  7. php 函数strtr 替换函数实例解析 strtr 速度比较快
  8. dueros基于什么开发的_干货丨超详细!DuerOS开发套件申请攻略!
  9. 微型计算机的硬件原理图,电脑硬件基础图解
  10. 2019腾讯广告大赛总结
  11. 优化python中os模块遍历文件夹时的排序问题
  12. IT6801FN中文版
  13. 用python画雨滴_python实现雨滴下落到地面效果
  14. hotmail邮箱设置
  15. 股票预测和股票分析就用FineBI!
  16. java中的面向对象(基础)
  17. 删除linux系统后无法开机启动,Win10/Linux双系统为什么把Linux删掉之后就不能正常启动开机了该如何处理恢复...
  18. 解决 Elasticsearch 分页查询记录超过10000时异常
  19. [LeetCode By Python]167. Two Sum II - Input array is sorted
  20. Django计算机毕业设计JAVA高校田径运动会管理(程序+LW)Python

热门文章

  1. [转]arm汇编相关链接
  2. 配置Cassandra开机启动(CentOS 7)
  3. 【转】JS回调函数--简单易懂有实例
  4. MySQL:数据操作
  5. 收藏 | 数据分析师最常用的10个机器学习算法!
  6. 数据加密之MD5加密
  7. [转]改变UITextField placeHolder颜色、字体
  8. [数字信号处理]IIR滤波器的间接设计(C代码)(转)
  9. DNN3.0 beta 本地化初体验
  10. 安卓高手之路之(架构设计)