JAVA基础篇——特殊文件

十五、特殊文件

类型

普通文件.txt——内容随便写,格式随意!

属性文件.properties——每行都是一个键值对

XML文件.xml——开始标签和结束标签组成,其中

原因

普通文件不好区分用户之间的信息;属性文件存储用户名和密码比较方便,再多存几个用户属性不太够用;XML文件可以存储用户的多个属性

作用

存储有关系的数据,作为系统的配置文件;作为信息进行传输

日志技术

把程序运行信息记录到文件,方便查看运行信息、debug

1. Properties属性文件

特点:

  • 存储的是键值对
  • 键不能重复
  • 一般以.properties为后缀

作用:

  • 记录用户名和信息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

读文件

public class PropertiesTest1 {
    public static void main(String[] args) throws Exception {
        // 1. 创建一个Properties对象
        Properties properties = new Properties();
        System.out.println(properties);

        // 2. 开始加载属性文件中的键值对数据到properties对象中去
        properties.load(new FileReader("properties\\src\\users.properties"));
        System.out.println(properties);

        // 3. 取某个键对应的值
        System.out.println(properties.getProperty("张三"));
        
        // 4. 遍历全部的键和值
        Set<String> keys = properties.stringPropertyNames();
        for (String key : keys) {
            System.out.println(key + ": " + properties.getProperty(key));
        }
        
        // Lambda遍历
        properties.forEach((k, v) -> {
            System.out.println(k + "--->" + v);
        });
    }
}

写文件

public class PropertiesTest2 {
    public static void main(String[] args) throws Exception {
        // 1. 创建一个Properties对象
        Properties properties = new Properties();
        System.out.println(properties);

        // 2. 用这个对象存储一些键值对数据
        properties.setProperty("张张", "123");
        properties.setProperty("周周", "456");
        properties.setProperty("赵赵", "789");

        // 3. 存入文件
        properties.store(new FileWriter("properties\\src\\users2.properties"), "users and password");
    }
}

2. XML文件

EXtensible Markup Language, 可扩展标记语言

本质是一种数据结构,可以用来存储复杂的数据结构和数据关系

特点:

  • <标签名>称为标签或元素,一般是承兑出现

  • 可以自己定义(可扩展),必须正确嵌套

  • 只能有一个根标签

  • 标签可以有属性,由键和值组成

  • 内容是XML格式就成为XML文件,后缀是.xml

  • 例:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!--以上抬头声明必须有且放在第一行-->
    <!--根标签只能有一个-->
    <users>
        <user id="1">
            <name>张无忌</name>
            <sex></sex>
            <地址>光明顶</地址>
            <password>12344</password>
            <!--&lt; <-->
            <!--&gt; >-->
            <!--&amp; &-->
            <!--&apos; '-->
            <!--&quot; "-->
            <定义> 2 &gt;= 3 </定义>
            <data>
                <!--输入CD后,IDE可以补全,在这个CDATA数据区里面,内容可以随便写-->
                <![CDATA[
                    1 < 3
                ]]>
            </data>
        </user>
    </users>
    

作用:数据结构,存储复杂的数据结构和数据关系

应用场景:系统的配置文件;在网络中进行传输

2.1 解析XML文件——读取

自己写原始的IO流代码来解析XML,难度较大,也很繁琐———开源好用的解析XML框架,Dom4j(第三方研发的)

思想:文档对象模型

读取

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

public class Dom4jTest1 {
    public static void main(String[] args) throws Exception {
        // 1. 创建一个Dom4J的解析器对象
        SAXReader saxReader = new SAXReader();

        // 2. 使用sexReader对象的read()方法,将文件解析成document对象
        Document document = saxReader.read("properties\\src\\helloworld.xml");

        // 3. 从文档对象中解析XML文件的全部数据
        Element root = document.getRootElement();
        System.out.println(root.getName());  // users

        // Element中提供的解析具体数据的方法
        // 注意:自上而下的解析方式
        // 4. 获取根元素下的全部一级子元素
        List<Element> elements = root.elements();  // 可以加子元素,分组相当于
        for (Element element : elements) {
            System.out.println(element.getName());  // user
        }

        // 5. 获取当前元素下的某个子元素
        Element people = root.element("people");
        System.out.println(people.getText());
        // 如果下面有很多子元素,默认获取第一个
        Element user = root.element("user");
        System.out.println(user.element("name").getText());  //张无忌
        System.out.println(user.elementText("name"));  //张无忌

        // 获取元素的属性信息
        System.out.println(user.attributeValue("id"));

        // 7. 如何获取全部的文本内容:获取当前元素下的子元素文本值
        System.out.println(user.elementTextTrim("name"));  // 取出文本去除空格
        System.out.println(user.elementText("地址"));
        System.out.println(user.elementText("password"));
    }
}

写出:不建议用dom4j做

直接把程序里的数据拼接成XML格式,然后用IO流写出去

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值