配置文件
日志
1. Properties属性文件
1.1 特点、作用
- 都只能是键值对
- 键不能重复
- 文件后缀一般是.properties结尾的
1.2 读取
package cn.hdc.oop10.properties;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Properties;
import java.util.Set;
public class t1 {
public static void main(String[] args) throws Exception {
//新建配置文件对象
Properties properties = new Properties();
System.out.println(properties);
//读取数据
properties.load(new FileReader("itDay01\\src\\Users.properties"));
System.out.println(properties);
//键取值
System.out.println(properties.get("赵敏"));
System.out.println(properties.get("张无忌"));
//遍历全部的键和值
Set<String> set = properties.stringPropertyNames();
set.forEach(item -> {
System.out.println(item + "=" + properties.get(item));
});
//Lambda
properties.forEach((k, v) -> {
System.out.println(k + "=" + v);
});
}
}
1.3 存储
package cn.hdc.oop10.properties;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
public class t2 {
public static void main(String[] args) throws Exception {
//新建配置文件对象
Properties properties = new Properties();
properties.setProperty("jsz", "1233");
properties.setProperty("wsn", "1235");
properties.setProperty("wzn", "1234");
properties.store(new FileWriter("itDay01\\src\\Users2.properties"), "I saved many users");
}
}
1.4 总结
Properties的作用?具体如何使用?
可以加载属性文件中的数据到Properties对象中来
void load(Reader reader)
public String getProperty(String key) 根据键获取值
可以存储Properties属性集的键值对数据到属性文件中去
void store(Writer writer, String comments)
public Object setProperty(String key, String value) 设置键值
2. XML属性文件
1.1 特点、作用
1.1.1 XML及特点
1.1.2 语法规则
<?xml version="1.0" encoding="utf-8" ?>
<Users>
<user id="1">
<name>赵无极</name>
<grade><80</grade>
</user>
<user id="2">
<name>玄子</name>
<grade><![CDATA[海神阁阁主99]]></grade>
</user>
<user id="3">
<name>王秋儿</name>
<grade>>100</grade>
</user>
</Users>
XML的组成格式要求是什么样的?
文件后缀一般是是xml,文档声明必须是第一行
必须存在一个根标签,有且只能有一个
XML文件中可以定义注释信息:<!–- 注释内容 -->
标签必须成对出现,有开始,有结束标签: <name></name>
必须能够正确的嵌套
1.1.3 XML作用及应用
1.2 读取
1.2.1 Dom4j
1.2.2 Document
1.2.3 Element
package cn.hdc.oop10.xml;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.List;
public class t2 {
public static void main(String[] args) throws Exception {
SAXReader reader = new SAXReader();
Document doc = reader.read("itDay01\\b-2.xml");
Element ele = doc.getRootElement();
//ele方法
//得到根节点元素名字
String rootName = ele.getName();
System.out.println(rootName);
//得到当前元素下所有子元素
List<Element> allElements = ele.elements();//得到user集合
for (Element element : allElements) {
System.out.println(element.getName());
//通过属性名得到属性值
String id = element.attributeValue("id");
System.out.println(id);
//得到当前元素下指定名字的子元素,如果有很多名字相同的返回第一个
String name = element.element("name").getText();
System.out.println(name);
// List<Element> userList = element.elements();
// for (Element user : userList) {
// System.out.println(user);//user里面的每一个元素的集合
// }
}
}
}
1.2.4 案例
b_2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<users>
<user id="1">
<name>张无忌</name>
<password>minmin</password>
<address>光明顶</address>
<gender>男</gender>
</user>
<user id="2">
<name>敏敏</name>
<password>wuji</password>
<address>光明顶</address>
<gender>女</gender>
</user>
</users>
Java
package cn.hdc.oop10.xml;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.ArrayList;
import java.util.List;
public class t1 {
public static void main(String[] args) throws Exception {
ArrayList<User> userList = new ArrayList<>();
SAXReader reader = new SAXReader();
Document doc = reader.read("itDay01\\b-2.xml");
Element ele = doc.getRootElement();
//获取根标签下的所有子标签
List<Element> list = ele.elements();
//遍历根标签的集合
for (Element element : list) {
String name = element.element("name").getText();
String password = element.element("password").getText();
String address = element.element("address").getText();
String gender = element.element("gender").getText();
User user = new User(name, password, address, gender);
userList.add(user);
}
System.out.println(userList);
}
}
class User {
private String name;
private String password;
private String address;
private String gender;
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
", address='" + address + '\'' +
", gender='" + gender + '\'' +
'}';
}
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 String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public User() {
}
public User(String name, String password, String address, String gender) {
this.name = name;
this.password = password;
this.address = address;
this.gender = gender;
}
}
1.3 约束(了解)
1.3.1 DTD文档
1.3.2 Schema文档
3. 日志
3.1 概念
3.1.1 日志技术
3.1.2 日志技术的体系结构
3.2 快速入门
3.2.1 基本使用
package cn.hdc.oop10.log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class t1 {
public static final Logger LOGGER = LoggerFactory.getLogger(t1.class);
public static void main(String[] args) {
// LOGGER.info();
// LOGGER.debug();
// LOGGER.warn();
// LOGGER.error();
LOGGER.info("开始执行div方法了...");
div(1, 2);
div(1, 0);
}
public static int div(int a, int b) {
try {
LOGGER.debug("方法执行了a={},b={}", a, b);
return a / b;
} catch (Exception e) {
LOGGER.error("{}除{}出错了", a, b);
e.printStackTrace();
throw new RuntimeException();
}
}
}
3.2.2 日志级别
3.2.3 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
CONSOLE :表示当前的日志信息是可以输出到控制台的。
-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--输出流对象 默认 System.out 改为 System.err-->
<target>System.out</target>
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度
%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%n</pattern>
</encoder>
</appender>
<!-- File是输出的方向通向文件的 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
<charset>utf-8</charset>
</encoder>
<!--日志输出路径-->
<file>F:/log/itheima-data.log</file>
<!--指定日志文件拆分和压缩规则-->
<rollingPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--通过指定压缩文件名称,来确定分割文件方式-->
<fileNamePattern>F:/log/itheima-data-%i-%d{yyyy-MM-dd}-.log.gz</fileNamePattern>
<!--文件拆分大小-->
<maxFileSize>1MB</maxFileSize>
</rollingPolicy>
</appender>
<!--
1、控制日志的输出情况:如,开启日志,取消日志
-->
<root level="ALL">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE" />
</root>
</configuration>