自己创建本地文件Hello.txt 里面有数据

小明/23/增城/广东
小花/12/浦东/上海

StudentManager.java

package com.lanqiao.dmeo7;import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;public class StudentManager {// 创建集合List<Student> list = new ArrayList<Student>();// 加载数据方法public void load(String file) throws Exception {// 创建文件File files = new File("D:/Hello.txt");// 字节流转字符流Reader re = new FileReader(files);BufferedReader br = new BufferedReader(re);String str = null;while ((str = br.readLine()) != null) {System.out.println("读取文件:\n" + str);// 拆分每一行数据存进去数组String[] date = str.split("/");// 创建对象 将每一行的数据存进对象里面Student stu = new Student();stu.setName(date[0]);// 注意:在这里需要转型 字符串转整形stu.setAge(Integer.parseInt(date[1]));stu.setCity(date[2]);stu.setProvince(date[3]);// 将对象保存在集合中list.add(stu);}// 遍历输出集合中的数据 第一种for (int i = 0; i < list.size(); i++) {Student s = (Student) list.get(i);System.out.println(s.getName() + "\t" + s.getAge() + "\t" + s.getCity() + "\t" + s.getProvince() + " ");}// 第二种 foreach/** for(Student stu : list) { System.out.println(stu.getName()+" "+stu.getAge());* }*/}// 创建xml文件public void creatXml() throws FileNotFoundException, IOException {// 1.创建文档Document doc = new Document();// 2.创建根结点   在这里的根结点是通过new  出来的  因为是从没有到有的Element rootElement = new Element("Students");//通过集合循环添加对象里面的属性   用setTest 方法for (int i = 0; i < list.size(); i++) {// 3.往根结点中添加下面的子节点rootElement.addContent(new Element("Student").addContent(new Element("name").setText(list.get(i).getName())) // 集合里面不指定范型是用不了Student// 对象里面的方法的// 这里要将整形转化为字符串 只要在后面加一个双引号就行了.addContent(new Element("age").setText(list.get(i).getAge() + "")).addContent(new Element("city").setText(list.get(i).getCity())).addContent(new Element("province").setText(list.get(i).getProvince())));}// 4.把根结点绑定在文档上doc.addContent(rootElement);// 5.保存生成的Xml文档IO流 这里是指定输出格式 还有编码格式XMLOutputter output = new XMLOutputter(Format.getPrettyFormat().setEncoding("UTF-8").setIndent("    "));// 指定输出xml的名字 用的是文件输出流 OutputStream out = new FileOutputStream();// 让子类去实现output.output(doc, new FileOutputStream("config.xml"));System.out.println("操作完成,请刷新");}// 增 追加xml文件内容public void addXml(Student stu) throws Exception {// 创建工厂SAXBuilder builder = new SAXBuilder();// 创建文档Document doc = builder.build(new File("config.xml"));//在这里记得是new File  出来先// 获取根结点Element rootEle = new Element("Students");// 往根结点下面的子节点中添加节点rootEle.addContent(new Element("Student").addContent(new Element("name").setText(stu.getName())).addContent(new Element("age").setText(stu.getAge() + "")).addContent(new Element("city").setText(stu.getCity())).addContent(new Element("province").setText(stu.getProvince())));// 将文档绑定到根结点中doc.addContent(rootEle);XMLOutputter output = new XMLOutputter(Format.getPrettyFormat().setEncoding("UTF-8").setIndent("    "));output.output(doc, new FileOutputStream("config.xml"));}// 删 根据名字来删除public void delXml(String delName) throws JDOMException, IOException {//创建工厂SAXBuilder builder = new SAXBuilder();//创建文档Document doc = builder.build(new File("config.xml"));//获取根结点Element ele = doc.getRootElement();//获取Element 总根结点下面的所有子节点 List<Element> lis = ele.getChildren();//遍历查找for (int i = 0; i < lis.size(); i++) {//获取每一个具体的子节点 例如说 student   student  student Element e = lis.get(i);if(e.getName().equals(delName)) {//删除子节点的时候要根据根结点来删除ele.removeContent(e);System.out.println("Delete Name Successful");}}}// 改 根据名字来修改public void updateXml(String oldName, String newName) throws JDOMException, IOException {// 创建工厂SAXBuilder builder = new SAXBuilder();// 创建文档Document doc = builder.build(new File("config.xml"));// 获取根结点Element ele = doc.getRootElement();//获取根结点下面的子节点   返回的是一个集合List<Element> li = ele.getChildren();  //记得指定集合的类型  不然下面需要转类型//遍历查找for(int i = 0; i<li.size();i++) {Element e = li.get(i);if(e.getChildText("name").equals(oldName)) {//getChile 和  getChileText  的区别是  前者获取的是节点   后者是获取节点里面的值e.getChild("name").setText(newName);//这句话的意思是 第二个根结点下获取的name这个子节点 并且赋值成newNameSystem.out.println("Update Info Successfully!!");}}//将根结点绑定在文档上面doc.addContent(ele);XMLOutputter output = new XMLOutputter(Format.getPrettyFormat().setEncoding("UTF-8").setIndent("    "));output.output(doc, new FileOutputStream("config.xml"));}// 查 根据名字来查询public void findByName(String findByName) throws JDOMException, IOException {//创建工厂SAXBuilder builder = new SAXBuilder();//创建文档Document doc = builder.build(new File("config.xml"));//获取根结点Element ele = doc.getRootElement();//将根结点下面的所有节点找出来  返回element 集合  而不是StudentList<Element> list = ele.getChildren();//遍历查找for (int i = 0; i < list.size(); i++) {Element e = list.get(i);if(e.getName().equals(findByName)) {System.out.println("查询结果如下:\n"+e.getChildText("age")+"\t"+e.getChildText("city"));}}}}

Test.java

package com.lanqiao.dmeo7;/*** 对XMl的增、删、改、查的综合运用* * 结合集合的运用* @author qichunlin**/
public class Test {public static void main(String[] args) throws Exception {StudentManager sm = new StudentManager();sm.load("D:/Hello.txt");//增sm.addXml(new Student("小花",23,"武汉","湖南"));//删sm.delXml("小齐");//改sm.updateXml("小齐","小qi");//查sm.findByName("小七");}
}

Student.java

package com.lanqiao.dmeo7;/*** 学生类  * 属性: 名字   年龄  城市  省份* * @author qichunlin**/
public class Student {private String name;private int age;private String city;private String province;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getProvince() {return province;}public void setProvince(String province) {this.province = province;}public String toString() {return "Student [name=" + name + ", age=" + age + ", city=" + city + ", province=" + province + "]";}public Student(String name, int age, String city, String province) {super();this.name = name;this.age = age;this.city = city;this.province = province;}public Student() {super();// TODO Auto-generated constructor stub}}

转载于:https://www.cnblogs.com/qichunlin/p/8819612.html

2018.4.13 用java配置/生成Xml文件 结合IO流知识点相关推荐

  1. Java——SAX生成XML文件

    SAX生成XML文件  准备工作 创建一个SAXTransformerFactory 类对象 //创建一个 SAXTransformerFactory 类对象 SAXTransformerFactor ...

  2. oxygen 生成java对象_利用oxygen编辑并生成xml文件,并使用JAVA的JAXB技术完成xml的解析...

    首先下载oxygen软件(Oxygen XML Editor),目前使用的是试用版(可以安装好软件以后get trial licence,获得免费使用30天的权限,当然这里鼓励大家用正版软件!!!) ...

  3. jaxb xml 生成 java_使用 JAXB 工具根据 Java 类生成 XML 模式

    使用 JAXB 工具根据 Java 类生成 XML 模式 2010-06-10 18:24:26|  分类: web service |字号 订阅 关键字: java to xml 使用 JAXB 工 ...

  4. java jdom 设置第1行_Java通过jdom操作生成XML文件的实例代码下载

    工作需要,要生成xml文件,所以做了个小demo分享一下. 看代码吧~ main()里面没什么好说的 该写的都写了public static void main(String[] args) { // ...

  5. java指定sql生成xml_SQL Server根据查询结果,生成XML文件

    /* 'bcp' 不是内部或外部命令,也不是可运行的程序? 看看在C:\Program Files\Microsoft SQL Server\80\Tools\Binn里面有没有bcp.exe这个文件 ...

  6. dom解析和生成XML文件

    使用这种方式解析时,需要使用node.getNodeType() == Node.ELEMENT_NODE判断结点是否为元素结点,否则会输出很多#text(结点前有空格存在的原因). 完成的XML解析 ...

  7. java 读取sql xml文件是否存在_java.oracle問題,如下,我看到一个XML文件有一个SQL。...

    一个XML文档,可以先构造一个DOM,然后将DOM转化为xml序列,输出或者生成文件.package test; import java.io.ByteArrayOutputStream; impor ...

  8. oracle中xml如何存储过程,oracle存储过程生成xml文件

    oracle存储过程生成xml文件 CREATE OR REPLACE PROCEDURE Pro_OracleToXML(personid varchar2,name varchar2,addres ...

  9. java dom创建xml文件_Java 如何使用dom方式读取和创建xml文件

    Java 如何使用dom方式读取和创建xml文件 发布时间:2020-11-11 17:08:31 来源:亿速云 阅读:101 作者:Leah 本篇文章给大家分享的是有关Java 如何使用dom方式读 ...

最新文章

  1. 使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型...
  2. linux存储--文件描述符fd与FILE结构体(二)
  3. 关于超级计算机的英语作文,中国研制出世界最强超级计算机
  4. python pyside简单布局_python – pyside显示/隐藏布局
  5. (解决)mysql1366中文显示错误的终极解决方案
  6. Codeforces Round #643 (Div. 2)(AB)
  7. 简单的学习心得:网易云课堂Android开发第六章SQLite与ContentProvider
  8. 腾讯移动分析+html5,FAQ · 腾讯移动分析 文档
  9. SSH客户端常用工具SecureCRT操作
  10. 区别Transform、Transition、Animation
  11. 201521123009 《Java程序设计》第1周学习总结
  12. 智慧交通day02-车流量检测实现13:基于虚拟线圈法的车辆统计+视频中的车流量统计原理解析
  13. Altium Designer_PCB板装配图的PDF文件输出
  14. cad命令栏怎么调出来_中望CAD菜单栏和功能栏都消失怎么办
  15. 【AI视野·今日CV 计算机视觉论文速览 第220期】Wed, 16 Jun 2021
  16. excel自动换行快捷键_Excel中Alt键的10大应用技巧解读
  17. HTML在线颜色选择器源码
  18. 【安全】靶场实战-通过MS16-032提权
  19. 拆字在线版-扌斥字在纟戋片反
  20. Android P指示灯调节代码逻辑

热门文章

  1. Java 复制List的值
  2. spoon kettle连接数据库失败解决方法
  3. 【转】JNI(Java Native Interface)的简介
  4. 图像的线性变换的原理及OpenCV代码实现~
  5. 利用OpenCV的函数createTrackbar创建滑动条查看二值化的最优阈值的源码及讲解
  6. OpenCV中CV_IS_MAT_CONT(src->type dst->type) 的含义
  7. php 网页内容下载,php实现当前页面点击下载文件的简单方法
  8. ubuntu mysql 设置编码_ubuntu下修改mysql默认编码问题
  9. leetcode @38报数-js
  10. 【跃迁之路】【678天】程序员高效学习方法论探索系列(实验阶段435-2018.12.23)...