一:Properties
1.是一个Map集合(键值对集合),但是我们一般不会当集合使用。
2.核心作用:Properties是用来代表属性文件的,通过Properties可以读写属性文件里的内容。
3.使用Properties读取属性文件里的键值对数据
构造器:
Properties() 用于构建Properties集合对象(空容器)
方法:
load(InputStream is) 通过字节输入流,读取属性文件里的键值对数据
load(Reader reader) 通过字符输入流,读取属性文件里的键值对数据
getProperty(String key) 根据键获取值(其实就是get方法的效果)
set<String> StringPropertyNames() 获取全部键的集合(其实就是keySet方法的效果)
import java.io.FileReader;
import java.util.Properties;
import java.util.Set;
public class Test1 {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
properties.load(new FileReader("SpecialFileAndClander\\User.properties"));
Set<String> key = properties.stringPropertyNames();
for (String s : key) {
String property = properties.getProperty(s);
System.out.println(s +"----->"+property);
}
properties.forEach((v,s) -> System.out.println(v+"---->"+s));
}
}
使用Properties把键值对数据写出到属性文件里去
构造器:
Properties() 用于构建Properties集合对象(空容器)
方法:
setProperty(String key, String value) 保存键值对数据到Properties对象中去。
store(OutputStream os, String comments) 把键值对数据,通过字节输出流写出到属性文件里去
store(Writer w, String comments) 把键值对数据,通过字符输出流写出到属性文件里去
import java.io.FileWriter;
import java.util.Properties;
public class Test2 {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
properties.setProperty("蔡建宇", "455");
properties.setProperty("余洋", "555");
properties.setProperty("杨博铭", "655");
properties.store(new FileWriter("SpecialFileAndClander\\what"), "success");
}
}
二:XML(全称EXtensible Markup Language,可扩展标记语言)
1.本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系。
2.XML的特点
①XML中的"<标签名>"称为一个标签或一个元素,一般是成对出现的。
②XML中的标签名可自己定义(可扩展),但必须要正确的嵌套。
③XML中只能有一个根标签。
④XML中的标签可以有属性。
3.XML的语法规则
①XML文件的后缀名为:xml,文档声明必须是第一行
<?xml version="1.0" encoding="UTF-8" ?>
version:XML默认的版本号码,该属性是必须存在的
encoding:本XML文件的编码
②XML中可以定义的注释信息:<!--注释内容-->
③XML中书写"<"、"&"等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代。
< < 小于 > > 大于 & & 和号 ' ' 单引号 " " 引号
④XML中可以写一个叫CDATA的数据区:<![CDATA[ ...内容... ]]>, 里面的内容可以随便写。
4.XML的作用和应用场景
①本质是一种数据格式,可以存储复杂的数据结构,和数据关系。
②应用场景:经常用来做为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输。
5.示例:
<?xml version="1.0" encoding="UTF-8" ?>
<users>
<user id="1">
<name>蔡建宇</name>
<age>19</age>
<address>湖北</address>
<character>皮</character>
<data>5 < 3 && 4 > 2</data>
<data2>
<![CDATA[
5 < 2 SAD dADWASD
]]>
</data2>
</user>>
<user id="2">
<name>王凯</name>
<age>18</age>
<address>新疆</address>
<character>瘦</character>
<data>
5 < 3 && 4 > 2
</data>
</user>
</users>
三:解析XML(Dom4j解析XML-得到Document对象)
1.SAXReader:Dom4j提供的解析器,可以认为是代表整个Dom4j框架
构造器:
SAXReader() 构建Dom4j的解析器对象
read(String url) 把XML文件解读成Doucunment对象
read(InputStream is) 通过字节输入流读取XML文件
2.Document
方法:
getRootElement() 获取根元素对象
3.Element提供的方法
getName() 得到元素名字
getValue() 得到元素的属性值
elements() 得到当前元素下的所有子元素
elements(String name) 得到当前元素下指定名字的子元素返回集合
element(String name) 得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
attributeValue(String name) 通过属性名直接得到属性值
elementText(子元素名) 得到指定名称的子元素的文本
getText() 得到文本
getTextTrim() 取出文本去除前后空格
3.示例:
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.List;
public class Test3 {
public static void main(String[] args) throws Exception {
SAXReader saxReader = new SAXReader();
Document read = saxReader.read("SpecialFileAndClander\\src\\TEST1\\First.xml");
Element root = read.getRootElement();
System.out.println(root.getName());
List<Element> users = root.elements();
for (Element user__ : users) {
List<Element> user_ = user__.elements();
for (Element user : user_) {
System.out.println(user.getName());
}
}
Element user = root.element("user");
System.out.println(user.attributeValue("id"));
Attribute id = user.attribute("id");
System.out.println(id.getName());
System.out.println(id.getValue());
System.out.println(user.elementText("age"));
Element data = user.element("data");//对于含有特殊符号的需要先转换为文本后才能得到其正确的形式
System.out.println(data.getText());
}
}
---------------------------------------------------------------------------------------补充
对于使用程序把数据写出到XML文件中去,不建议使用dom4j做,推荐直接把程序里的数据拼接成XML格式,然后用IO流写出去!
import java.io.BufferedWriter;
import java.io.FileWriter;
public class Test4 {
public static void main(String[] args) {
StringBuffer st = new StringBuffer();
st.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n");
st.append("<book>\r\n");
st.append("\t<name>").append("吞噬星空").append("</name>\r\n");
st.append("\t<author>").append("不吃西红柿").append("</author>\r\n");
st.append("\t<price>").append(188.8).append("</price>\r\n");
st.append("</book>");
try(BufferedWriter bw = new BufferedWriter(new FileWriter("SpecialFileAndClander\\src\\TEST1\\Second.xml"));) {
bw.write(st.toString());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}