特殊文件(属性文件和XML文件)

  • 后缀为.properties的文件,称之为属性文件,它可以很方便的存储一些类似于键值对的数据。经常当做软件的配置文件使用。

  • 而xml文件能够表示更加复杂的数据关系,比如要表示多个用户的用户名、密码、家乡、性别等。在后面,也经常当做软件的配置文件使用。

属性文件:

定义:

1.Properties是什么?
    Properties是Map接口下面的一个实现类,所以Properties也是一种双列集合,用来存储键值对。      但是一般不会把它当做集合来使用。
    
2.Properties核心作用?
    Properties类的对象,用来表示属性文件,可以用来读取属性文件中的键值对。

特点:

  1. 属性文件后缀以.properties结尾

  2. 属性文件里面的每一行都是一个键值对,键和值中间用=隔开。比如: admin=123456

  3. #表示这样是注释信息,是用来解释这一行配置是什么意思。

  4. 每一行末尾不要习惯性加分号,以及空格等字符;不然会把分号,空格会当做值的一部分。

  5. 键不能重复,值可以重复

解析:

使用Properties读取属性文件中的键值对,需要用到的方法如下。

1、创建一个Properties的对象出来(键值对集合,空容器)
2、调用load(字符输入流/字节输入流)方法,开始加载属性文件中的键值对数据到properties对象中去
3、调用getProperty(键)方法,根据键取值

package properties;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class Test {
    public static void main(String[] args) throws IOException {
        //准备工作
        File file = new File("D:\\Java文件\\A高级Java代码\\specialFile\\src\\properties\\user.properties");
//        System.out.println(file.exists());

        //创建properties对象
        Properties properties = new Properties();
        //加载文件
        properties.load(new FileInputStream(file));
        //获得文件
        String userName = properties.getProperty("userName");
        String passWord = properties.getProperty("passWord");
        String age = properties.getProperty("age");
        String jdbcUserName = properties.getProperty("jdbc.userName");
        System.out.println(userName);
        System.out.println(passWord);
        System.out.println(age);
        System.out.println(jdbcUserName);

    }
}

XML文件

定义:

XML文件是可扩展的标记语言,由一些标签组成,这些标签可以自定义,本质是一种数据格式,可以用来表示复杂的数据关系

XML文件有如下的特点:

  • XML中的<标签名> 称为一个标签或者一个元素,一般是成对出现的。

  • XML中的标签名可以自己定义(可扩展),但是必须要正确的嵌套

  • XML中只能有一个根标签。

  • XML标准中可以有属性

  • XML必须第一行有一个文档声明,格式是固定的<?xml version="1.0" encoding="UTF-8"?>

  • XML文件必须是以.xml为后缀结尾

<?xml version="1.0" encoding="UTF-8"?>
<根元素名>
    <元素名 属性名="属性值" 属性名2="属性值2">
    </元素名>
</根元素名>

注意事项(标识符):

上面XML文件中的数据格式是最为常见的,标签有属性、文本、还有合理的嵌套。XML文件中除了写以上的数据格式之外,还有一些特殊的字符不能直接写。

  • <,>,&等这些符号不能出现在标签的文本中,因为标签格式本身就有<>,会和标签格式冲突。

    如果标签文本中有这些特殊字符,需要用一些占位符代替。

&lt;  表示 <
&gt;  表示 >
&amp; 表示 &
&apos; 表示 '
&quot; 表示 "

如果在标签文本中,出现大量的特殊字符,不想使用特殊字符,此时可以用CDATA区,格式如下

<data1>
    <![CDATA[
   		3 < 2 && 5 > 4
    ]]>
</data1>

XML解析:(java解析XML)

使用程序读取XML文件中的数据,称之为XML解析。这里并不需要我们自己写IO流代码去读取xml文件中的数据。其实有很多开源的,好用的XML解析框架,最知名的是DOM4J(第三方开发的)

首先导包:

DOM4J解析XML需要用到的方法如下图所示

XML解析的过程,是从根元素开始,从外层往里层解析。 我们先把Document对象,和根元素获取出来

获取到XML文件的根元素之后,接下来,就可以用根元素在获取到它里面的子元素(包括子标签、表属性等)。需要用到的方法如下图所示

具体代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<users>
    <user id = "1" desc = "第一个人">
        <name>张三</name>
        <address>内&apos;蒙&quot;古</address>
        <age>18</age>
    </user>
    <people>很多&amp;人</people>
    <user id = "2">
        <name>李四</name>
        <address>江&lt;苏</address>
        <age>2&gt;0</age>
        <sex>女</sex>
        <code>
            <![CDATA[
                <name>"王二麻子"</name>
                <address><浙江></address>
                <age>1&1</age>
            ]]>
        </code>
    </user>
</users>

解析代码:

package xml;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.File;
import java.util.List;

public class Dom4JTest1 {
    public static void main(String[] args) throws Exception{
        File file = new File("D:\\Java文件\\A高级Java代码\\specialFile\\src\\xml\\user.xml");

        //创建核心工具库
        SAXReader saxReader = new SAXReader();
        //通过工具类,解析xml,获得整个文档Document
        Document document = saxReader.read(file);
        //通过文档获得根元素Element users
        Element root = document.getRootElement();
        //根元素的元素名
        System.out.println(root.getName());
        //通过根元素获得所有的user元素
        List<Element> userElementList = root.elements("user");
        //遍历所有user元素
        for (Element userElement : userElementList) {
            //获得id属性的值
            String id = userElement.attributeValue("id");
            System.out.println(id); //1 2
            //获得desc属性的值
            Attribute descAttribute = userElement.attribute("desc");
            if (descAttribute != null){
                //如果属性不存在 对象为null
                String descValue = descAttribute.getValue();
                System.out.println(descValue); //第一个人 2
            }
            //获得name子元素的值
            String nameText = userElement.elementText("name");
            System.out.println("name:" + nameText);  //张三 李四
            //获得age子元素的值
            Element ageElement = userElement.element("age");
            String ageText = ageElement.getText();
            // 去掉回车换getTextTrim()
            // String ageText = ageElement.getTextTrim();
            System.out.println("age:" + ageText); //18 2>0
            //获得code子元素的值
            String code = userElement.elementText("code");
            System.out.println("code" + code);
        }
    }
}

XML约束:

规定xml文件如何编写的文件

  • 常见约束文件2种:

    • dtd :老版本,约束内容单一(少)

    • schema:新版本,约束内容复杂(多)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值