自己创建本地文件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这个子节点 并且赋值成newName
System.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 集合 而不是Student
List<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
} }

2018.4.13 用java配置/生成Xml文件 结合IO流知识点的更多相关文章

  1. java配置context.xml文件

    2018-02-08   23:32:23 修改context.xml文件 自从学习了servlet后,每次修改里面的内容后,想要访问都要重启服务器,这样感觉很麻烦的,所以今天就教大家一个方法,只需要 ...

  2. 【java学习笔记】文件读写(IO流)

    1.字节流 FileInputStream.FileOutputStream ①FileInputStream import java.io.FileInputStream; public class ...

  3. 使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置

    1.使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置 2.上代码:在resources目录下新建:generatorConfiguration.xml文 ...

  4. Java生成XML文件

    我们在数据库中的数据可以将其提取出来生成XML文件,方便传输.例如数据库中有Admin这张表: 我们写一个java类表示admin数据: package xmlDom.vo; import java. ...

  5. 利用oxygen编辑并生成xml文件,并使用JAVA的JAXB技术完成xml的解析

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

  6. Java&Xml教程(四)使用DOM方式生成XML文件

    在前面的教程中,我们学习了使用DOM解析方式读取和修改XML文件内容,今天我们来学习如何使用DOM解析机制生成XML文件. 下面是我们对要生成的XML文件的具体要求: 1.根节点元素为"Em ...

  7. java 编程基础:注解(Annotation Processing Tool)注解处理器 利用注解解读类属性生成XML文件

    APT的介绍: APT(Annotation Processing Tool)是一种注解处理工具,它对源代码文件进行检测,并找出源文件所包含的注解信息,然后针对注解信息进行额外的处理. 使用APT工具 ...

  8. Java中使用DOM4J来生成xml文件和解析xml文件

    一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...

  9. asp.net 生成xml文件 与 asp生成xml文件

    一.asp.net 生成xml文件 webservice方式,调用接口: public XmlDocument List() { XmlDocument doc = new XmlDocument() ...

随机推荐

  1. C# 随机列表

    一.问题描述 在EF中使用随机排序出现的问题:LINQ to Entities does not recognize the method 'System.Guid NewId()' method, ...

  2. bzoj 4788: [CERC2016]Bipartite Blanket【hall定理+状压】

    考虑当前合法的一个点集s,如果他合法,那么一定有一个完备匹配的点集包含这个点集,也就是两边都满足hall定理的话这两边拼起来的点集也满足要求 所以分别状压两边点集用hall定理转移判断当前点集是否合法 ...

  3. codevs1553 互斥的数

    1553 互斥的数    

  4. jzoj6003. 【THUWC2019模拟2019.1.16】Square (乱搞)

    题面 题解 不难发现,如果一行最后被染色,那么这行的颜色肯定一样,如果倒数第二个被染色,那么除了被最后一个染色的覆盖的那一部分剩下的颜色肯定一样 于是题目可以转化为每一次删去一行或一列颜色相同的,问最 ...

  5. python3编程技巧二——如何在列表、字典、集合 中根据条件筛选数据

    一.列表筛选数据 # coding=utf-8 from random import randint # 创建随机列表 l = [randint(-10, 10) for i in range(10) ...

  6. selenium IDE插件下载

    1.在https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/中下载Firefox的selenium-ide插件: 2.之后在Firef ...

  7. 随机算法瞎练BZOJ3237&3563&3569三倍经验题

    随机方法真的好骚啊O(∩_∩)O~ 最早的时候miaom提出一个奇怪的东西: 判断一个数列中是否有0/1/2个数出现奇数次 对每个数赋一个随机权值,异或乱搞,对于判2的情况用一个(可能类似线性基的)方 ...

  8. .net的基础知识点

    在这个It市场都是风云变化的,都是又市场供需来定的,当年iOS火的一塌糊涂的,现在也出现找不到工作的,满地的出入门者,我就属于其中一个,在一个逼不得已的情况下,开始转行做.net ,我相信当年的很多. ...

  9. 第十九章 排查和调试Web程序 之 防止和排查运行时问题

    1. 概述 常见的几种运行时问题包括 错误数据.慢于预期的响应.未知行为 或者 未处理的异常. Visual Studio 提供了 排查.跟踪 和 日志 等工具 来帮助排查系统的问题.有些情况还需要插 ...

  10. css3背景与边框相关样式

    background-attachment          背景图像是否固定或者随着页面的其余部分滚动 background-color                    设置元素的背景颜色 b ...