特殊文本文件
一、Properties
- 是一个Map集合(键值对集合),但是我们一般不会当集合用
- 核心作用:Properties是用来代表属性文件的,通过Properties可以读写属性文件里的内容
1.使用Properties读取属性文件里的键值对数据
(1)构造器
- public Properties():用于构建Properties
(2)常用方法
- public void load(InputStream is):通过字节输入流,读取属性文件里的键值对数据
- public void load(Reader reader):通过字符输入流,读取属性文件里的键值对数据
- public String getProperty(String key):根据键获取值(其实就是get方法的效果)
- public Set < String >stringPropertyNames():获取全部键的集合(其实就是ketSet方法的效果)
public class Demo01 {
public static void main(String[] args) throws IOException {
//创建Properties集合对象
Properties prop = new Properties();
//读取文件中的键值对数据
prop.load(new FileReader("day11\\users.properties"));
//获取所有键的集合(类似map的keySet方法)
Set<String> keys = prop.stringPropertyNames();
for (String key : keys) {
//根据键获取值(类似map的get方法)
String value = prop.getProperty(key);
System.out.println(key + "," + value);
}
}
}
2.使用Properties把键值对数据写出到属性文件里去
- public Object setProperty(String key,String value):保存键值对数据到Properties对象中去
- public void store(OutputStream os,String comments):把键值对数据,通过字节输出流写出到属性文件中
- public void store(Writer w,String comments):把键值对数据,通过字符输出流写到属性文件中
public class Demo02 {
public static void main(String[] args) throws IOException {
//创建Properties集合对象
Properties p = new Properties();
//存储键值对数据(类似map的put方法)
p.setProperty("《红楼梦》","曹雪芹");
p.setProperty("《水浒传》","施耐庵");
p.setProperty("《西游记》","吴承恩");
p.setProperty("《三国演义》","罗贯中");
//public void store(Writer w/OutputStream os, String comments); 将键值对数据存入指定的文件,comments注释
p.store(new FileWriter("day11\\books.properties"),"这是我的收藏书籍");
}
}
二、XML文件
- XML(可扩展的标记语言)是一种数据格式,能用来存储复杂的数据结构,由很多标签组成,而标签的名字是可以自定义的
1.特点
(1)xml中<标签名>成为一个标签或元素,必须成对出现
(2)xml中的标签可以自定义(可扩展),但必须正确的嵌套
(3)xml中只能有一对根标签
(4)xml中的标签可以自定义属性,属性和标签名用空格隔开,属性值必须用引号引起来
(5)如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般写成.xml
2.XML语法规则
- xml文件文档声明必须在第一行
- xml中可以定义注释信息:< !–注释内容 – >
- xml中书写"<“、”&"等,可能会出现冲突导致报错,可以用特殊字符替代
- xml文件中可以存在CDATA区,用来书写多个特殊字符:< ![CDATA[…内容…]]>
3.解析XML文件
(1)就是使用程序读取XML文件中的数据
(2)解析XML框架,最知名的是Dom4j(第三方)
(3)DOM(文档对象模型)解析思想:将文档的各个组成部分看做是对应的对象
(4)DOM4J准备工作
- 将jar包拖入项目的lib文件夹下
- 对着jar包右键,选择Add As Library
- 创建DOM4J解析器对象,获取Document文档对象,getRootElement获取根标签
(5)一层一层解析
Dom4j解析XML得到Document对象
-
SAXReader:Dom4j提供的解析器
- public SAXReader():构建Dom4J的解析器对象
- public Document read(String url):把XML文件读成Document对象
-
Document:文档对象
- Element getRootElement():获取根元素对象
(6)Element提供的方法
- public String getName():得到元素名字
- public List< Element > element():得到当前元素下的所有子元素
- public List< Element > elements(String name):得到当前元素下指定名字的子元素返回集合
- public Element Element (String name):得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
- public String attributeValue(String name):通过属性名直接得到属性值
- public String elementText(子元素名):得到指定名称的子元素文本
- public String getText():得到文本
public class Demo {
public static void main(String[] args) throws DocumentException {
//创建解析器对象
SAXReader saxReader = new SAXReader();
//获取文档对象
Document document = saxReader.read("day11\\users.xml");
//获取根标签
Element rootElement = document.getRootElement();
//获取所有指定名称的子标签
List<Element> elements = rootElement.elements("user");
//创建集合
ArrayList<User> list = new ArrayList<>();
//遍历集合,获取子标签
for (Element element : elements) {
//获取id属性
String id = element.attribute("id").getValue();
//获取name文本
String name = element.element("name").getText();
//获取password文本
String password = element.element("password").getText();
//获取address文本
String address = element.element("address").getText();
//获取password文本
String gender = element.element("gender").getText();
//封装User对象
User user = new User(id,name,password,address,gender.charAt(0));
//添加到集合
list.add(user);
}
//验证
for (User user : list) {
System.out.println(user);
}
}
}
//用户类
class User{
private String id;
private String name;
private String password;
private String address;
private Character gender;
public User() {
}
public User(String id, String name, String password, String address, Character gender) {
this.id = id;
this.name = name;
this.password = password;
this.address = address;
this.gender = gender;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Character getGender() {
return gender;
}
public void setGender(Character gender) {
this.gender = gender;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", password='" + password + '\'' +
", address='" + address + '\'' +
", gender=" + gender +
'}';
}
}
4.XML约束文档
(1)专门用来限制xml书写格式的文档,比如:限制标签,属性应该怎么写
(2)约束文档的分类
-
DTD文档,后缀必须是.dtd,例如book.dtd,在需要编写的XML文件中导入该DTD约束文档< !DOCTYPE bookshelf SYSTEM “book.dtd”>,然后XML文件就必须按照DTD约束文档指定的格式进行编写,否则报错
可以约束XML文件的编写,不能约束具体的数据类型
-
Schema文档,后缀必须是.xsd,可以约束XML文件的编写和数据类型