聪聪工作室---XML---从txt文件中读取内容存到XML文件中-程序员宅基地

技术标签: java  开发工具  

文章转自:https://www.jianshu.com/p/b6ee0d5b463d

 

在实现这个程序中遇到一些编码问题,从txt文件中得到的数据放入xml文件的过程中报错

后来解决了,是转码问题,在eclipse中的build path中把编码格式转成utf-8输出


思路:

分析info.txt文件中的数据,构建一个构造函数类

Regionn.java 代码

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement; @XmlAccessorType(XmlAccessType.FIELD) public class Regionn { @XmlAttribute(name = "id") private String id; @XmlElement(name = "name") private String name; @XmlElement(name = "boss") private String boss; @XmlElement(name = "avgIncome") private String avgIncome; @XmlElement(name = "superRegion") private String superRegion; public Regionn() { } public Regionn(String id) { this(); this.id = id; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getBoss() { return boss; } public void setBoss(String boss) { this.boss = boss; } public String getAvgIncome() { return avgIncome; } public void setAvgIncome(String avgIncome) { this.avgIncome = avgIncome; } public String getSuperRegion() { return superRegion; } public void setSuperRegion(String superRegion) { this.superRegion = superRegion; } @Override public String toString() { return "Region [id=" + id + ", name=" + name + ", boss=" + boss + ", avgIncome=" + avgIncome + ", superRegion=" + superRegion + "]"; } } 

代码截图:


 
Regionn01.png
 
Regionn02.png

思路:

思路的第一点是把txt中的文件读取出来,并把它存放到一个集合中

具体实现:

RegionInfoParser.java 代码

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList; import java.util.List; public class RegionInfoParser { public static List<Regionn> parseRegions(String filename) { // List<Region> �Ƿ���ֵ���� ��String filename)�Ǵ���IJ��� BufferedReader br = null;// ��ʼ��Ϊ�� List<Regionn> results = new ArrayList<Regionn>(); // <Regionn>�Ƿ��� // ����һ��ArrayList ���� try { br = new BufferedReader(new FileReader(filename));// ���ļ� String line = null;// ��ʼ��line while ((line = br.readLine()) != null) { // ����ȡ������Ϣ��Ϊ��ʱ line = line.trim();// ȥ�����ߵĿո� if (line.startsWith("#")) { continue;// �����#��ͷ�ģ�������� } String[] patterns = line.split(","); // �Ѷ��������л��Զ��Ž��зָ���ַ�浽������ String id = patterns[0];// ����pattern�����±�Ϊ0���ַ�Ϊid String name = patterns[1]; String avgIncome = patterns[2]; String superRegion = patterns[3]; String boss = (patterns.length == 5) ? patterns[4] : "";// 判断 // 如果patterns这个数组的长度是5的话,那就把数组中最后一个下标的值定义为空字符串 // 多余的加的一个知识点,条件判断 Regionn region = new Regionn(); // Regionn���Զ���ķ����� region.setId(id);// �Ѵ�info.txt�ļ���ȡ����һ�����ַָ���ַ���������� // Ȼ�������������±�Ϊ0���ַ���Regionn������е�setId()�ķ�������Ϊ������ region.setName(name); region.setAvgIncome(avgIncome); region.setSuperRegion(superRegion); region.setBoss(boss); results.add(region);// ������б��ĩβ���ָ����� // List�ǹ����б?��ĩβ���region������ŵ�����String���͵ģ� // Ȼ�������ŵ�List��һ�������г����������б� } } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) {
                                                                   // 最后,如果继续读取的不是空的话 try { br.close();// 一个循环后执行操作关闭继续读取 } catch (IOException e) { e.printStackTrace();// 返回异常 } } } return results; } } 

代码截图:


 
RegionInfoParser01.png
 
RegionInfoParser02.png

思路:

现在需要一个List的包装类,把得到的集合数据放到List<Regionn> regions这个集合类中去

RegionList.java 代码

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="regions")//这些@是把内容输出到xml文件中的意思 @XmlAccessorType(XmlAccessType.FIELD) public class RegionList { @XmlElement(name="regions") private List<Regionn> regions;//定义一个集合类 public RegionList(){ regions=new ArrayList<Regionn>(); //构造函数中的这个regions 是一个集合 new一个新的集合 } public void setRegions(List<Regionn> regions){ this.regions=regions;//(List<Regionn> regions)传入一个参数是一个集合 } public List<Regionn> getRegions(){ return regions;//List<Regionn>是这个方法的返回值类型,getRegions得到这个集合 } public void addRegion(Regionn region){ this.regions.add(region);//region是传入的参数,把这个类中的内容add添加到这个List列表中,List滚动列表 } } 

代码截图:


 
RegionList01.png

思路:

现在全部的准备操作已经完成,现在是用JAXB来存入数据到xml文件中去,RegionList文件是为JAXB做准备的,@XmlRootElement(name="regions")//这些@是把内容输出到xml文件中的意思
@XmlAccessorType(XmlAccessType.FIELD)
@XmlElement(name="regions")
private List<Regionn> regions;//定义一个集合类

RegionInfoConverter.java 代码

import java.io.File;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException; public class RegionInfoConverter { public static void main(String[] args) { List<Regionn> regions=RegionInfoParser.parseRegions("info.txt"); //这是一个List列表,里面有11组数据,一组数据是读出的一行内容分割成的字符串数组 RegionList regionListObj=new RegionList(); //new一个RegionList集合类 ,只是为了传参数 regionListObj.setRegions(regions);//把得到的regions这个集合中的数据传入 try { JAXBContext ctx=JAXBContext.newInstance(RegionList.class);//套路,从RegionList这个Class文件中得到 //在jaxb中,通常如果声明JAXBContext对象:其实它是一个抽象类 ctx.createMarshaller().marshal(regionListObj,new File("info.xml")); /* marshal 整理,排列,集结 ,regionList是new 的一个RegionList这个类的一个对象,新建一个xml文件,把regionList这个内容所转化出来的数据放入xml文件中 * Marshaller使客户端应用程序能够将 Java 内容树转换回 XML 数据。 * 它提供了各种重载的marshal方法。默认情况下,在将 XML 数据生成 * 到 java.io.OutputStream 或 java.io.Writer 中时, * Marshaller 将使用 UTF-8 编码。 */ } catch (JAXBException e) { e.printStackTrace();//返回异常 } } } 

代码截图:


 
RegionInfoConverter.png

实现的内容:


 
image.png

以下是对JAXBContext的操作理解

(1)JAXBContext。 JAXBContext类提供到 JAXB API 的客户端入口点。它提供了管理实现 JAXB 绑定框架操作所需的 XML/Java 绑定信息的抽象,这些操作包括:解组(Unmarshaller )、编组(Marshaller)和验证(Validator)。通常使用JAXBContext.newInstance(XXX.class) 来获取JAXBContext实例(Student是我定义的一个Entity)。

JAXBContext ctx = JAXBContext.newInstance(Student.class)

(2)Unmarshaller。 Unmarshaller 是一个Interface,它管理将 XML 数据反序列化为新创建的 Java 内容树的过程,并可在解组时有选择地验证 XML 数据。它针对如File,InputStream,URL,StringBuffer等各种不同的输入种类,提供各种重载的 unmarshal 方法。unmarshal 方法从不返回 null。如果unmarshal无法将 XML 内容的根解组到 JAXB 映射对象,则抛出 JAXBException。

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Student stu = (Student) unmarshaller.unmarshal(file);

(3)Marshaller。Marshaller使客户端应用程序能够将 Java 内容树转换回 XML 数据。它提供了各种重载的marshal方法。默认情况下,在将 XML 数据生成到 java.io.OutputStream 或 java.io.Writer 中时,Marshaller 将使用 UTF-8 编码。

            Marshaller marshaller = ctx.createMarshaller();         
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 格式化输出
            marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");// 设置输出编码,默认为UTF-8 marshaller.marshal(stu, xmlFile); 

作者: 聪聪工作室



作者:繁花流水congcong
链接:https://www.jianshu.com/p/b6ee0d5b463d
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/xzhuan/articles/txtToxml.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/acw0866/article/details/101588907

智能推荐

<VBScript>终极破产版石头剪刀布游戏(VBS语言实现)_vbs石头剪刀布-程序员宅基地

文章浏览阅读1.8k次,点赞6次,收藏4次。前几天拜读失泽久雄先生所著写的《计算机是怎样跑起来的》,当时看书中的代码用VBS语言写的一个石头剪刀布游戏特别好玩,于是手敲了一遍,并做了些改进——石头剪刀布小游戏。结果后来给一个朋友看,发现有bug,于是又在网上查了些资料,做了一些改进,此次带来石头剪刀布3.0破产版,哈哈哈。以下为代码实现,尽管简陋,不过有兴趣玩的朋友可以用Windows自带的笔记本把下面的代码粘过去,文档后缀名改成 .V..._vbs石头剪刀布

就是要让你搞懂Nginx,这篇就够了!-程序员宅基地

文章浏览阅读98次。开源Linux长按二维码加关注~作者:渐暖°出处:blog.csdn.net/yujing1314/article/details/107000737来源:公众号51CTO技术栈Ng..._nginx不开源的如何使用

JavaWeb书城项目(二)——用户注册和登录_传智书城项目设计报告 javaweb用户注册-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏17次。之前已经做好前端页面,现在要通过 servlet 程序以及 JDBC 具体实现用户注册和登录JavaEE项目的三层架构为什么要分层呢?通过一层完成所有事情不行吗?分层的目的是为了解耦。解耦就是为了降低代码的耦合度。方便项目后期的维护和升级。我们知道有些项目代码量是巨大的,如果放在一层后期维护和升级会很麻烦,如果分出不同的层,每层都有不同负责的人员,那么维护和升级会变得轻松很多。需要的接口和类web 层 com.atguigu.web/servlet/controllerservice 层._传智书城项目设计报告 javaweb用户注册

Ubuntu 系统 安装完Nginx和php后 能打开html .php提示下载或者connect() failed (111: Connection refused) while connectin_unix:/run/php/php8.3-fpm.sock failed (111: unknown-程序员宅基地

文章浏览阅读175次。php 版本为7.11.vim www.conf保存退出 重启php2.配置Nginx服务器vim /etc/nginx/nginx.conf在http{}中末尾添加或者在引用服务器域名配置的文件夹下新建一个文件也行我不知道为什么用fastcgi_pass unix:/var/run/php/php7.1-fpm.sock这个不行 但是fastcgi_pass 127.0.0..._unix:/run/php/php8.3-fpm.sock failed (111: unknown error) while connecti

k8s-高可用部署-calico插件_calico-3.9.2.yaml-程序员宅基地

文章浏览阅读2.6k次。kubernetes高可用部署参考:Creating Highly Available Clusters with kubeadm | KubernetesGitHub - kubernetes-sigs/kubespray: Deploy a Production Ready Kubernetes ClusterGitHub - wise2c-devops/breeze: Deploy a Production Ready Kubernetes Cluster with graphical interfa_calico-3.9.2.yaml

java 爬虫 抓取关键字_爬虫任务二:爬取(用到htmlunit和jsoup)通过百度搜索引擎关键字搜取到的新闻标题和url,并保存在本地文件中(主体借鉴了网上的资料)...-程序员宅基地

文章浏览阅读760次。packagecom.zhaowu.renwu2;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.net.MalformedURLException;importjava.net.URL;import..._爬虫java 无url通过文字抓取内容

随便推点

ADC触摸屏编程测试笔记_韦东山老师_adc_cnt-程序员宅基地

文章浏览阅读484次。首先我们要先知道触摸屏,他是透明的薄膜,LCD和触摸屏是两个不同的设备。我们不能把它混为一谈,触摸屏是触摸屏LCD是LCD。从韦老师的博客我们知道或者说百度,实际上触摸屏是由两层膜组成,我的理解是这样子更加方便ADC测量,也就是去进行精准位置。在学习ADC触摸屏编程测试的时候遇到一个问题,那就是在点击A点的时候自动跳过了B点直接到达C点位置校准。经过韦老师的分析加上自己的理解也终于明白..._adc_cnt

查看堆栈信息_hprof文件可以看到堆栈信息-程序员宅基地

文章浏览阅读1.3k次。本文不做说明,记录工作上内存泄漏相关定位工具生成堆栈文件通过jdk自带工具生成,线上使用的时候执行的时候提示找不到pid对应的文件,加上-F参数可以强制关联上jmap -F -dump:format=b,file=d:\dump\heap.hprof <pid>下面这个没有使用过,目测可以jcmd <pid> GC.heap_dump d:\dump\h..._hprof文件可以看到堆栈信息

service和systemctl的区别_systemctl service-程序员宅基地

文章浏览阅读1w次,点赞8次,收藏49次。Linux服务管理的两种方式service和systemctl。serviceservice命令其实是去/etc/init.d目录下,去执行相关程序,init.d目录包含许多系统各种服务的启动和停止脚本。当Linux启动时,会寻找这些目录中的服务脚本,并根据脚本的run level确定不同的启动级别。参考这篇文章,了解系统启动的过程及centos和ubuntu的区别。service的常用方式:1.格式:service <service>打印指定服务<service>的_systemctl service

Spine 事件-程序员宅基地

文章浏览阅读5k次。Spine 事件大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢!欢迎加入专业Spine技术交流群 Spine2D骨骼动画 7708065此文最初发表在群论坛,但后来腾讯放弃了群论坛所以迁至此处转载请保留原始链接:https://blog.csdn.net/jx520/article/details/83047366事件是动画过程中所发生情况的触发器。例如,当人物碰到地面发出声音。事件不限于音..._spine 事件

UNITY中判断两个点之间距离的方法_unity 判断两个距离-程序员宅基地

文章浏览阅读3.1k次,点赞3次,收藏4次。Vector3.SqrMagnitude与Vector3.Distance_unity 判断两个距离

Idea设置未使用的方法,变量的提示颜色_idea 更改未使用变量的颜色-程序员宅基地

文章浏览阅读2.8w次,点赞6次,收藏14次。修改未被调用的变量,方法的提示,方便观赏代码_idea 更改未使用变量的颜色