本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、硬编码
所谓硬编码,即将数据写死在 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):设置节点文本内容
- DocumentBuilder对象
- 步骤