【Java进阶】稍微了解一下配置文件

311 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。


一、硬编码

所谓硬编码,即将数据写死在 Java 代码中,后期会不定时进行修改

解决方法:将这些常用的信息提取出来,单独存放到一个文件中,然后通过程序读取文件中的数据

二、properties文件

(1)以 properties 为后缀名的文件,称为属性文件/配置文件/资源文件

(2)存储数据特点key=value 形式;多对数据使用换行分隔

(3)使用注意事项

  • 配置文件跟着字节码走,放在标记为 Resources Root 包中(resources
  • 配置文件中所有的数据都是字符串,不需要使用双引号括起来
  • 配置文件中的 key 和 value 前后不需要使用空格

(4)解析文件

  • Properties 类是 Map 的实现类
  • 常用 API
    • public void load(InputStream inStream):从输入字节流中获取属性列表(键值对)
    • public String getProperty(String key):从属性列表中搜索指定键的属性,并返回值
  • 类加载器
    • 通过类加载器将字节码根路径下的配置文件转为输入流对象Thread.currentThread().getContextClassLoader().getResourceAsStream("*.properties");

三、XML 文件

1. 概述

XML,即 eXtensible Markup Language,可扩展标记语言,

  • 设计宗旨是传输数据,并不是显示数据(HTML)
  • 标签没有被预定义,需要自定义标签
  • W3C的推荐标准

2. 文件编写要求

  • 在文档第一行做声明,声明表示该文档为 xml 类型<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    • version:xml 的版本
    • standalon:yes 为不可包含其他⽂档,no 或不写表示可包含也可不包含
    • encoding:编码格式,文档内容编码和文件编码需要统一(UTF-8)
  • <>表示 XML 文档中的元素/标签
  • 若有标签体需成对出现<xxx></xxx>
  • 若没有标签体可使用单标签<xxx/>
  • 标签中可以有属性(属性名="属性值")
  • 有且仅有一个根标签
  • 严格区分大小写
  • 允许标签嵌套,但不能交叉嵌套
  • 可以使用注释

3. 组成部分

XML 的各个组成部分都需要使⽤⼀个类型来描述

  • XML文件:将文件加载到内存中,使用 Document 对象描述整个文件
  • 标签/元素:所有标签,使用 Element 对象描述
  • 属性:标签的属性,使用 Attribute 描述
  • 文本:文本内容,使用 Text 描述

4. DOM

  • DOM,即 Document Object Model,文档对象模型,将文档中的成员描述成一个个对象

  • 使用 JavaScript 解析 HTML 中的数据

  • 特点:在加载时,一次性将整个 XML 文档加载进内存,在内存中形成一颗树(Document对象/DOM树)。使用代码操作 Document,实际上操作的是内存中的 DOM 树,与本地磁盘中的 XML 文件没有直接关系。对 DOM 树进行操作后,都需要进行同步操作,将内存中的数据更新到 XML 文件中

  • 缺点:若 XML文件过大,可能造成内存溢出;操作 XML 比较简单,但性能比较低

  • Document获取

    • 步骤
      // 【1】声明xml文件
      File file = new File(path);
      // 【2】通过DocumentBuilderFactory的newInstance方法获取本身的对象
      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
      // 【3】通过DocumentBuilderFactory对象获取DocumentBuilder对象
      DocumentBuilder builder = factory.newDocumentBuilder();
      // 【4】通过DocumentBuilder对象解析获取Document对象
      builder.parse(file);
      
    • API
      • DocumentBuilder对象
        • abstract Document newDocument():在内存中构建DOM树
        • Document parse(File file):将指定文件解析为XML文件,并在内存中形成一颗DOM树对象
      • Document对象
        • Element getDocumentElement():获取根节点
      • Element对象
        • NodeList getElementsByTagName(String name):通过标签名获取标签列表
        • String getAttribute(String name):根据属性名获取属性值
      • NodeList对象
        • int getLength():获取列表中的节点数
        • Node item(int index):根据索引获取节点([0, length - 1])
      • Node对象
        • String getTextContent():获取节点的文本内容
        • void setTextContent(String content):设置节点文本内容