Java教程 xml的IO流读取问题

Java教程 xml的IO流读取问题
关于Java中xml的读写问题相关描述:
xml是什么?
1、xml 是可扩展的标记语言
2、xml 被设计用来传输数据
在Java中,本身支持读写xml文件,但是性能不好,使用不方便。
业界读写项目了,一般使用dom4j
fom4j的下载地址为:https://dom4j.github.io/
fom4j 的安装教程:https://liuguangfa.com/java/153.html
使用Java语言详细读写xml的实操(此方法是读取和写入在一个类中进行实现)。
package com.situ.chapter4; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.net.URL; import java.util.List; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class Test1 { public static void main(String[] args) { InputStream is = Test1.class.getResourceAsStream("students.xml"); // System.out.println(is == null); // 使用dom4j读取xml文件。Document Object Model SAXReader reader = new SAXReader(); try { // 读取出文档对象 Document doc = reader.read(is); // 获取根节点 Element root = doc.getRootElement(); // System.out.println(root.getName()); // 返回根节点的所有子节点 List<Element> elems = root.elements(); for (Element elem : elems) { // 每一个elem就是一个student元素 System.out.println(elem.attributeValue("id")); // 获取指定名称的子节点 Element name = elem.element("name"); // System.out.println(name.getName()); System.out.println("name:" + name.getText()); Element sex = elem.element("sex"); System.out.println("sex:" + sex.getText()); Element age = elem.element("age"); System.out.println("age:" + age.getText()); } // 如果想往xml文件中写入数据,返回新增的节点 Element element = root.addElement("student"); // 设置属性 element.addAttribute("id", "004"); Element name = element.addElement("name"); name.setText("赵六"); Element sex = element.addElement("sex"); sex.setText("男"); Element age = element.addElement("age"); age.setText("20"); // 保存到一个文件中 URL url = Test1.class.getResource("students.xml"); OutputStream os = new FileOutputStream(new File(url.getPath())); // 创建一个输出格式 OutputFormat of = OutputFormat.createPrettyPrint(); // of.setIndentSize(8); // 定义一个xml写入器 XMLWriter writer = new XMLWriter(os, of); // 把xml文档写入到字节输出流 writer.write(doc); // 确保清空流 // os.flush(); } catch (DocumentException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } }
方法二:通过分来的类来写读写和写入的方法:
/** * 将文件以xml的格式进行保存 */ public void xmlFile() { // 创建文档 Document doc = DocumentHelper.createDocument(); // 创建根节点 Element employeeManager = doc.addElement("EmployeeManager"); for (int i = 0; i < employees.size(); i++) { // 创建子节点 Element element = employeeManager.addElement("employee"); // 在节点赋值属性 element.addAttribute("id", employees.get(i).getId()); // 创建子节点下节点 Element name = element.addElement("name"); name.setText(employees.get(i).getName()); Element age = element.addElement("age"); age.setText(employees.get(i).getAge()); Element sex = element.addElement("sex"); sex.setText(employees.get(i).getSex()); } // 生成xml格式 OutputFormat of = OutputFormat.createPrettyPrint(); // 生成文件 File file = new File("d:/employees.xml"); // 判断文件是否存在,如果存在删除原文件 if (file.exists()) { file.delete(); } try { // 创建xml文件编辑器 XMLWriter writer = new XMLWriter(new FileOutputStream(file), of); writer.write(doc); } catch (UnsupportedEncodingException | FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 将xml 读取出来 */ public void xmlReader() { File file = new File("d:/employees.xml"); // 判断文件是否存在 if (file.canExecute()) { } // 创建xml的解析对象 SAXReader reader = new SAXReader(); Document doc = null; try { // 把文件解析成xml doc = reader.read(file); // 获取xml的跟节点 Element element = doc.getRootElement(); // 获取根节点中【所有的节点】 List<Element> elements = element.elements(); for (Element e : elements) { // 获取指定节点 Element name = e.element("name"); Element age = e.element("age"); Element sex = e.element("sex"); Employees emp = new Employees(name.getText(), age.getText(), sex.getText(), e.attributeValue("id")); employees.add(emp); } } catch (DocumentException e) { e.printStackTrace(); } finally { } }
本文作者:刘广法,转载注明出处。