聪聪工作室---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

智能推荐

Eclipse中配置WebMagic(已配置好Maven)_使用eclipse搭建webmagic工程-程序员宅基地

文章浏览阅读364次。1.WebMagicWebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。2.在Eclipse中配置WebMagic1.首先需要下载WebMagic的压缩包官网地址为:WebMagic官网最新版本为:WebMagic-0.7.3,找到对应版本,打开下载界面,注意,下载要选择Source code(zip)版本,随便下载到哪里都可以;2.下载好的压缩包需要解压,此时解压到的位置即为后续新建的Eclipse的project位置,比如我的Ecli_使用eclipse搭建webmagic工程

linux启动mysql_linux如何启动mysql服务_linux启动mysql服务命令是什么-系统城-程序员宅基地

文章浏览阅读1.9k次。mysql数据库是一种开放源代码的关系型数据库管理系统,有很多朋友都在使用。一些在linux系统上安装了mysql数据库的朋友,却不知道该如何对mysql数据库进行配置。那么linux该如何启动mysql服务呢?接下来小编就给大家带来linux启动mysql服务的命令教程。具体步骤如下:1、首先,我们需要修改mysql的配置文件,一般文件存放在/etc下面,文件名为my.cnf。2、对于mysql..._linux中 mysql 启动服务命令

php实现在线oj,详解OJ(Online Judge)中PHP代码的提交方法及要点-程序员宅基地

文章浏览阅读537次。详解OJ(Online Judge)中PHP代码的提交方法及要点Introduction of How to submit PHP code to Online Judge SystemsIntroduction of How to commit submission in PHP to Online Judge Systems在目前常用的在线oj中,codeforces、spoj、uva、zoj..._while(fscanf(stdin, "%d %d", $a, $b) == 2)

java快捷键调字体_设置MyEclipse编码、补全快捷键、字体大小-程序员宅基地

文章浏览阅读534次。一、设置MyEclipse编码(1)修改工作空间的编码方式:Window-->Preferences-->General-->Workspace-->Text file encoding(2)修改一类文件的编码方式:Window-->Preferences-->General-->content Types-->修改default Encoding(..._java修改快捷缩写内容

解析蓝牙原理_蓝牙原理图详解-程序员宅基地

文章浏览阅读1.4w次,点赞19次,收藏76次。1.前言市面上关于Android的技术书籍很多,几乎每本书也都会涉及到蓝牙开发,但均是上层应用级别的,而且篇幅也普遍短小。对于手机行业的开发者,要进行蓝牙模块的维护,就必须从Android系统底层,至少框架层开始,了解蓝牙的结构和代码实现原理。这方面的文档、网上的各个论坛的相关资料却少之又少。分析原因,大概因为虽然蓝牙协议是完整的,但是并没有具体的实现。蓝牙芯片公司只负责提供最底层的API_蓝牙原理图详解

从未在一起更让人遗憾_“从未在一起和最终没有在一起哪个更遗憾”-程序员宅基地

文章浏览阅读7.7k次。图/源于网络文/曲尚菇凉1.今天早上出门去逛街,在那家冰雪融城店里等待冰淇淋的时候,听到旁边两个女生在讨论很久之前的一期《奇葩说》。那期节目主持人给的辩论题是“从未在一起和最终没有在一起哪个更遗憾”,旁边其中一个女生说,她记得当时印象最深的是有个女孩子说了这样一句话。她说:“如果我喜欢一个人呢,我就从第一眼到最后一眼,把这个人爱够,把我的感觉用光,我只希望那些年让我成长的人是他,之后的那些年他喝过..._从未在一起更遗憾

随便推点

Spring Cloud Alibaba 介绍_sprngcloud alba-程序员宅基地

文章浏览阅读175次。Spring Cloud Alibaba 介绍Sping体系Spring 以 Bean(对象) 为中心,提供 IOC、AOP 等功能。Spring Boot 以 Application(应用) 为中心,提供自动配置、监控等功能。Spring Cloud 以 Service(服务) 为中心,提供服务的注册与发现、服务的调用与负载均衡等功能。Sping Cloud介绍官方介绍​ Tools for building common patterns in distributed systems_sprngcloud alba

测试 数据类型的一些测试点和经验_基础字段的测试点-程序员宅基地

文章浏览阅读3.2k次,点赞4次,收藏21次。我这里是根据之前在测试数据类项目过程中的一些总结经验和掉过个坑,记录一下,可以给其他人做个参考,没什么高深的东西,但是如果不注意这些细节点,后期也许会陷入无尽的扯皮当中。1 需求实现的准确度根据产品需求文档描述发现不明确不详细的或者存在歧义的地方一定要确认,例如数据表中的一些字段,与开发和产品确认一遍,如有第三方相关的,要和第三方确认,数据类项目需要的是细心,哪怕数据库中的一个字段如果没有提前对清楚,后期再重新补充,会投入更大的精力。2 数据的合理性根据业务场景/常识推理,提..._基础字段的测试点

一文看懂:行业分析怎么做?_码工小熊-程序员宅基地

文章浏览阅读491次。大家好,我是爱学习的小xiong熊妹。在工作和面试中,很多小伙伴会遇到“对XX行业进行分析”的要求。一听“行业分析”四个字,好多人会觉得特别高大上,不知道该怎么做。今天给大家一个懒人攻略,小伙伴们可以快速上手哦。一、什么是行业?在做数据分析的时候,“行业”两个字,一般指的是:围绕一个商品,从生产到销售相关的全部企业。以化妆品为例,站在消费者角度,就是简简单单的从商店里买了一支唇膏回去。可站在行业角度,从生产到销售,有相当多的企业在参与工作(如下图)在行业中,每个企业常常扮._码工小熊

LLaMA 简介:一个基础的、650 亿参数的大型语言模型_llma-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏2次。还需要做更多的研究来解决大型语言模型中的偏见、有毒评论和幻觉的风险。我们在数万亿个令牌上训练我们的模型,并表明可以仅使用公开可用的数据集来训练最先进的模型,而无需诉诸专有和不可访问的数据集。在大型语言模型空间中训练像 LLaMA 这样的小型基础模型是可取的,因为它需要更少的计算能力和资源来测试新方法、验证他人的工作和探索新的用例。作为 Meta 对开放科学承诺的一部分,今天我们公开发布 LLaMA(大型语言模型元 AI),这是一种最先进的基础大型语言模型,旨在帮助研究人员推进他们在 AI 子领域的工作。_llma

强化学习在制造业领域的应用:智能制造的未来-程序员宅基地

文章浏览阅读223次,点赞3次,收藏5次。1.背景介绍制造业是国家经济发展的重要引擎,其产能和质量对于国家经济的稳定和发展具有重要意义。随着工业技术的不断发展,制造业的生产方式也不断发生变化。传统的制造业通常依赖于人工操作和手工艺,这种方式的缺点是低效率、低产量和不稳定的质量。随着信息化、智能化和网络化等新技术的出现,制造业开始向智能制造迈出了第一步。智能制造的核心是通过大数据、人工智能、计算机视觉等技术,实现制造过程的智能化、自动化...

ansible--安装与使用_pip安装ansible-程序员宅基地

文章浏览阅读938次。系列文章目录文章目录系列文章目录 前言 一、ansible是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言菜鸟一只,刚开始使用,仅作以后参考使用。边学习,边记录,介绍一下最基础的使用,可能会有理解不到位的地方,可以共同交流,废话不多说,走起。一、ansible 简介?ansible是自动化运维工具的一种,基于Python开发,可以实现批量系统配置,批量程序部署,批量运行命令,ansible是基于模块工作的,它本身没有批量部署的能力,真正.._pip安装ansible

推荐文章

热门文章

相关标签