特殊文本文件
一、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;}@Overridepublic 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文件的编写和数据类型