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

智能推荐

FPGA设计经验谈 —— 10年FPGA开发经验的工程师肺腑之言-程序员宅基地

文章浏览阅读2.4k次,点赞10次,收藏30次。FPGA设计经验谈 —— 10年FPGA开发经验的工程师肺腑之言2014年08月08日 14:08 看门狗关键词: FPGA作者:friends  从大学时代第一次接触FPGA至今已有10多年的时间。至今记得当初第一次在EDA实验平台上完成数字秒表,抢答器,密码锁等实验时,那个兴奋劲。当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用..._fpga开发经验是什么

Java程序设计实验六 Socket网络程序设计-程序员宅基地

文章浏览阅读5.4k次,点赞7次,收藏52次。[1]实验目的:理解Socket通信原理,掌握使用Socket和ServerSocket类进行TCP Socket通信的程序设计方法。[2]实验内容:1、使用ServerSocket类和Socket类实现按如下协议通信的服务器端和客户端程序。服务器程序的处理规则如下:向客户端程序发送Verifying Server!。 若读口令次数超过3次,则发送Illegal User!给客户端,程序退出。否则向下执行步骤3)。 读取客户端程序提供的口令。 若口令不正确,则发送PassWord Wr_实验六 socket网络程序设计

易语言和python混合编程_易语言python交互源码,不需要把易语言编译成静态库-程序员宅基地

文章浏览阅读422次。.版本 2.支持库 spec.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行.局部变量 mothod, PyMethodDef.局部变量 创建结果, 整数型.局部变量 错误类型, 整数型.局部变量 错误信息, 文本型.局部变量 错误信息2, 整数型.局部变量 错误信息3, 文本型.局部变量 错误堆栈, 整数型Py_SetPythonHome (“C:\Python36”)Py_..._易语言python混合开发

数仓建设生命周期_最最最全数据仓库建设指南,速速收藏!-程序员宅基地

文章浏览阅读557次。开讲之前,我们先来回顾一下数据仓库的定义。数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。这个概念最早由数据仓库之父比尔·恩门(Bill Inmon)于1990年在《建立数据仓库》一书中提出,近年来却被愈发广泛的提及和应用,不信看下图:到底是什么,让一个从上世纪90年代提出的概念,在近几年确越来越热?带着这个问题,我们来了解一..._数仓生命周期管理

winform GridControl 总结-程序员宅基地

文章浏览阅读2.4k次,点赞4次,收藏19次。winfrom GridControl总结一、GridControl和GridView的关系GridControl表示网格控件,网格控件使用视图(如 GridView、BandedGridView)来显示数据。GridControl 相当于容器,GridView 相当于容器中的可视化组件,一个GridControl网格控件里面可以有多个视图。类似于 Excel 表格文件 与工作表 Sheet 的关系。二、绑定数据源点击 RunDesigner增加列 Column与DataTabl_winform gridcontrol

安装完Ubuntu后要做的事情-程序员宅基地

文章浏览阅读100次。Ubuntu 16.04安装完成后,还需要做一些配置才能愉快的使用,所以装完系统后还要进行一系列的优化。1.删除libreofficelibreoffice虽然是开源的,但是Java写出来的office执行效率实在不敢恭维,装完系统后果断删掉sudoapt-getremovelibreoffice-common2.删除Amazon的链接sudoapt-get..._prepend domain-name-servers 114.114.114.114;

随便推点

python的string模块(字符)和random模块的使用_import string在python中的用法-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏18次。一、模块string的简单使用import string #导入string模块,获取大小写字母、特殊字符、数字等#获取大小写字母abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZprint(string.ascii_letters)#获取大写字母ABCDEFGHIJKLMNOPQRSTUVWXYZprint(string.ascii_uppercase)#获取小写字母abcdefghijklmnopqrstuvwxyzprint(s_import string在python中的用法

IntelliJ IDEA导入 Eclipse 项目【山东大学 现代软件开发技术】2023.2.2 Ulitimate Edition_idea导入eclipse-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏8次。本文记录了将 Eclipse 项目 导入 IDEA 2023.2.2 的过程,同时也适用于山东大学现代软件开发技术这门课的开发环境迁移。_idea导入eclipse

Chrome浏览器调试教程_chrome 浏览器调试协议-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏2次。Chrome浏览器及调试教程引言在web开发过程中,我们在写JavaScript脚本时难免会遇到各种bug,这时,我们就需要去调试我们的JavaScript脚本,然后去修改代码。最简单的调试方法就是使用alert方法,将可信息通过alert方法的弹窗显示出来。但是,alert方法有几个弊端:1)alert方法在弹..._chrome 浏览器调试协议

【小程序开发必备】微信小程序常用API全介绍,附示例代码和使用场景_微信小程序代码大全-程序员宅基地

文章浏览阅读1.1w次,点赞64次,收藏180次。本篇博文介绍了微信小程序常用API,包括网络请求、数据缓存、交互反馈、设备、媒体、界面、开放接口等方面。每个API都附有详细的介绍和示例代码,以及使用场景。这些API可以帮助小程序开发者快速实现各种功能和交互效果,是小程序开发的必备工具。无论是初学者还是有一定经验的开发者,都能从本篇博文中学到很多实用的技巧和知识。_微信小程序代码大全

Lc.exe已退出 代码为-1 解决方法-程序员宅基地

文章浏览阅读92次。打开一个别人曾经做的项目,里面用来三方控件,本机没有安装此控件,只是添加的相应的dll,结果导致了LC.exe错误:"Lc.exe已退出 代码为-1 "解决方法:1、把项目文件夹下Properties文件夹下的licenses.licx文件删除,重新编译即可;2、文本方式打开*.csproj文件,在文件中查找licenses.licx字样,删除对应节点。注意:还有..._错误64“lc.exe”已退出,代码为 -1。printlab

matlab paper size,Matlab有用的小工具小技巧-程序员宅基地

文章浏览阅读714次。hc=colorbar;set(hc,'FontSize',times*get(hc,'FontSize'))%假设有colorbar,实际上就是另外一个axes,同样设置它的字体看了这个这里才知道输出格式还可以在ExportSetup里设置的,而set(findall(gcf,'-property','FontSize'),'FontSize',12)可以把所有的对象中字体大小都改到12号!7...._matlab papersize

推荐文章

热门文章

相关标签