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

Java教程 xml的IO流读取问题

刘广法2022年03月24日 16:53:23Java教程4410
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语言介绍

一、Java语言的起源与发展二、Java语言的应用最大的应用是互联网上,比如说淘宝、工商银行、中国银行、大数据相关企业应用方面、财务管理系统、人力资源管理系统,erp系统,教务管理系统移动互联网系统,安卓系统三、使用记事本开发一个Hell World程序public class ...

Java教程 第四节:流程控制语句总结

流程控制语句:一、顺序结构顺序结构:按照写代码的顺序 一次执行二、分支结构1、if语句if(条件){     语句块 }2、if...else...语句if(条件){     语句块 }else{  ...

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 修改默认的工作空间以及修改个人工作空间的编码

一、修改工作空间workspaceFile-->Awitch Workspace-->Other,就打开下面的图,然后选择我标起来的就可以新建工作空间了。二、设置工作空间workspace的编码为UTF-8设置完你所用的工作空间也就是上一步后,需要修改工作空间的编码为UTF-8步骤如下:...

eclipse 如何更换JDK版本 替换自带的JDK版本

eclipse 如何更换JDK版本 替换自带的JDK版本

设置jdk,用安装的JDK替换eclipse自带的JDK(详细步骤)1、Window-->Presferences2、进入后,搜索“java”,找到“Installed JRES”3、删除自带的JDK:选中自带的jdk,然后选择remove。4、添加自己安装的JDK:选中右边的Add,选择St...

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

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

Java练习:从控制台输入一个年份,统计输入的年份到现在一共多少天?

从控制台输入一个年份,统计输入的年份到现在一共多少天?注意事项:1、平年365天,闰年十366天。2月份平年28天,2月份闰年29年。2、今年2022年3月14日3、闰年判断:能够被四百整数;能被4整数但不能被100整数public static void main(S...

用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学习 第五节:break和continue关键字

break和continue关键字break:表示中断,退出。退出当前一层循环。一旦break,后面的语句将不会得到执行。continue:中断本次循环,直接进行下一次的循环。continue后面的语句将不会得到执行。...

Java教程 第六节:数组

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

发表评论

访客

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