特殊文件
.txt
普通文件.txt
普通的属性=文件、里面的内容可以随便写,格式随意
.properties
属性文件.properties
使用场景:存储多个用户的用户名、密码等情况
特点:
- 都只能是键值对
- 键不能重复
- 文件后缀一般是.properties结尾的
#这是注释
#属性文件的内容都是一些键值对信息,每行都是一个键值对
#属性文件的后缀:一般都是.properties结尾的
admin=123456
zhangsan=5dw6a1d6a
使用Properties读取.properties属性文件的键值对数据到内存中
import java.io.FileReader;
import java.util.Properties;
import java.util.Set;
public class PropertiesTest1 {
public static void main(String[] args) throws Exception {
//1.创建一个Properties的对象出来(键值对集合,此时为空容器)
Properties properties = new Properties();
System.out.println(properties);
//2.开始加载属性文件中的键值对数据到properties对象中去
properties.load(new FileReader("day13-properties-xml-log-app\\src\\users.properties"));
System.out.println(properties);
//3.根据键取值
System.out.println(properties.getProperty("张三"));
System.out.println(properties.getProperty("王五"));
System.out.println("-----------------");
//4.遍历全部的键和值
//a.根据Properties的特有方法stringPropertyNames
Set<String> keys = properties.stringPropertyNames();
for (String key : keys) {
String value = properties.getProperty(key);
System.out.println(key + "--->" + value);
}
System.out.println("-----------------");
//b.根据Map的forEach
properties.forEach((k,v) -> System.out.println(k + "--->" + v));
}
}
使用Peoperties把键值对数据写出到属性文件里去
import java.io.FileWriter;
import java.util.Properties;
public class PropertiesTest2 {
public static void main(String[] args) throws Exception {
//1.创建Properties对象出来,先用它存储一些键值对数据
Properties properties = new Properties();
properties.setProperty("张三","zhangsan");
properties.setProperty("李四","lisi");
System.out.println(properties);
//2.把properties对象中的键值对数据存入到属性文件中去
properties.store(new FileWriter("day13-properties-xml-log-app\\src\\user2.properties"),"i saved many users!");
}
}
.xml
XML文件.xml.(可扩展标记语言)
本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系
特点:
- XML中的"<标签名>"称为一个标签或一个元素,一般都是成对出现的
- XML中的标签名可以自己定义(可扩展),但必须要正确的嵌套
- XML中只能有一个根标签
- XML中的标签可以有属性
- 如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml
使用场景:存储有关系的数据,作为系统的配置文件,或者作为一种特殊的数据结构,在网络中进行传输。例如存储多个用户的用户名、密码、家乡、性别等。
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 注释:以上抬头声明必须放在第一行,必须有! -->
<!-- XML文件的后缀:一般都是.xml-->
<users>
<user id = "1" desc = "abc">
<name>张三</name>
<sex>男</sex>
<地址>翻斗花园</地址>
<data> 3 < 2 && 5 > 4 </data>
<data>
<![CDATA[
3 < 2 && 5 > 4
]]>
</data>
</user>
<people>很多人</people>
<user id = "2">
<name>李四</name>
<sex>男</sex>
<地址>光明顶</地址>
</user>
</users>
DOM4J解析XML文件的思想:文档对象模型
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.List;
public class Dome4JTest1 {
public static void main(String[] args) throws Exception {
//目标:掌握使用Dom4j框架解析XML文件
//1.创建一个Dom4J框架提供的解析器对象
SAXReader saxReader = new SAXReader();
//2.使用saxReader对象把需要解析的XML文件读成一个Document对象
Document document = saxReader.read("day13-properties-xml-log-app\\src\\helloworld.xml");
//3.从Document文档对象中解析XML文件的全部数据
Element root = document.getRootElement();//获得根元素
System.out.println(root.getName());
//4.获取根元素下的全部一级子元素
List<Element> elements = root.elements();
for (Element element : elements) {
System.out.println(element.getName());
}
System.out.println("----------------");
//传入字符串获取特定的一批子元素
List<Element> users = root.elements("user");
for (Element user : users) {
System.out.println(user.getName());
}
System.out.println("-------------------");
//5.获取当前元素下的某一个子元素
Element people = root.element("people");
System.out.println(people.getText());
//如果当前元素下有很多子元素user,默认获取第一个
Element user = root.element("user");
System.out.println(user.elementText("name"));
//6.获取元素的属性信息呢?
System.out.println(user.attributeValue("id"));
Attribute id = user.attribute("id");
System.out.println(id.getName());
System.out.println(id.getValue());
List<Attribute> attributes = user.attributes();
for (Attribute attribute : attributes) {
System.out.print(attribute.getName() + " = ");
System.out.println(attribute.getValue());
}
System.out.println("----------------------------");
//7.如何获取全部的文本内容:获取当前元素下的子元素文本值
System.out.println(user.elementText("name"));
System.out.println(user.elementText("地址"));
System.out.println(user.elementTextTrim("地址"));//去除文本前后空格
Element data = user.element("data");
System.out.println(data.getText());
System.out.println(data.getTextTrim());//去除文本前后空格
}
}
使用程序把数据写出到XML文件中去
不建议用dom4j来做,推荐直接把程序里的数据拼接成XML格式,然后用IO流写出去
这里只提供相应思路:
使用StringBuilder对象拼接字符串(注意\r\n换行),拼接完后调用toString()方法转成String类型的对象,使用输出流写出即可
日志技术
- 可以将系统执行的信息,记录到指定的位置(控制台、文件中、数据库中),方便程序员定位bug、并了解程序的执行情况等
- 可以随时以开关的形式控制日志的启停,无序侵入到源代码中去进行修改
在此前我们记录日志一般都会使用输出语句展示在控制台,但这种方法存在许多弊端
日志技术的体系结构
其中Logback是我们最为常用的日志框架,Logback日志框架有以下几个模块:
Logback快速入门
核心配置文件logback.xml
日志级别