当前位置:首页 > 学习笔记 > Java教程 > Java教程 xml的IO流读取问题

Java教程 xml的IO流读取问题

刘广法2022年03月24日 16:53:23Java教程8450
Java教程 xml的IO流读取问题-第1张图片-刘广法IT博客

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 {

		}
	}


本文作者:刘广法,转载注明出处。

扫描二维码推送至手机访问。

版权声明:本文由刘广法博客发布,如需转载请注明出处。

本文链接:https://liuguangfa.com/java/150.html

分享给朋友:

“Java教程 xml的IO流读取问题” 的相关文章

Java教程 第二节:基本数据类型与变量

一、关键词在java中有特殊含义的一些词,比方说 public class 等。break;break 主要用在循环语句或者 switch 语句中,用来跳出整个语句块。break 跳出最里层的循环,并且继续执行该循环下面的语句。二、标识符起唯一标识作用的,类似我们自己的姓名,学校中的学号,公司中的工...

java学习:Java流程控制语句的相关测试题

第一题:将所有包含3的三位数整数相加求和。103 131 133 301类似。public static void main(String[] args) { int n = 100;// 从n开始三位数...

eclipse删除工作空间的详细步骤(图解)

eclipse删除工作空间的详细步骤(图解)

上一次我修改添加eclipce的工作空间,但只我的eclipce上有两个工作空间,今天我想删除一个第一步: Window > Preferences > General > startup and shutdown -->workspace这就是删除eclipse的...

eclipse 自动提示功能的实现

eclipse 自动提示功能的实现

之前用的版本都是有提示的,最近安装的最新版没有提示,今天就设置让自动提示出来第一步:windows”->"preferences",弹出preferences设置窗口。第二步:在preferences中找到Java,依次展开列表"Editor"->...

eclipse的快捷键功能

eclipse的快捷键功能

有一些快捷键是可以修改的,具体修改过程如图下:修改快捷的详细步骤:1、使用快捷键调出快捷键列表进行查看:快捷键列表调用:shift + ctrl + L2、window->preferences->general->keys(或直接搜索keys)快捷键列表:shuft + ctrl...

Java练习:找出三位数中所有的水仙花的值

找到三位数中所有为水仙花的值1、水仙花:百位数的立方+十位数的地方+个位数的立方等于这个数本身。2、三位数中。具体的步骤:public static void main(String[] args) { int i =&nbs...

用Java实现打印各种图形总结篇(矩形、平行四边形、三角形、菱形)

1、用Java实现打印矩形(长方形、正方形): public static void main(String[] args) { for (int y = 0; y < ...

Java练习:百钱百鸡利用Java进行实现

今有100块钱,需要购买100只鸡,已知鸡的价格是:公鸡5元,母鸡3元,小鸡三只元,问:需要购买多少只公鸡、母鸡、小鸡?Java实现百鸡百钱的方法一: public static void main(String[] args) { for&n...

Java练习:打印出所有3位数的素数

课堂练习:打印出所有3位数的素数。素数:只能被1和其本身整除的数 public static void main(String[] args) { // 打印三位数的素数,素数只能被1和本身整数的数。 for (int...

Java教程 第六节:数组

数组数组:简单来说,就是一组相同数据类型的数。float[] score = new float[6];索引或者下标:必须是整数,不能为负。最大下标等于数组长度-1。float[0],就是float类型数据score的第一个项。数组的下标结合循环,可以简化对批...

Java练习:控制台输入十个成绩,编程对这些成绩取平均值,并判断出成绩最大值和成绩最小值

有控制台输入十个成绩,编程对这些成绩取平均值,并判断出成绩最大值和成绩最小值 public static void main(String[] args) { // 有控制台输入十个成绩,编程对这些成绩取平均值,并判断出成绩最大值和成...

Java练习:将数组中的元素首尾调换

数组课堂练习:将数组中的元素首尾调换 public static void main(String[] args) { // 数组课堂练习:将数组中的元素首尾调换 int[] a = { ...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。