特殊文件java

properties 属性文件

  1. 里边存放 键值对
  2. 键不能重复
  3. 文件后缀一般是 properties 结尾的

使用properties读取属性文件
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("properties-xml-log-app\\src\\users.properties"));
        System.out.println(properties);

        //3.根据键取值
        System.out.println(properties.getProperty("张琳"));

        //4.遍历全部的键和值
        Set<String> keys = properties.stringPropertyNames();
        for (String key : keys) {
            System.out.println(key+"-->"+properties.getProperty(key));
        }

        properties.forEach((k,v)-> System.out.println(k+"-->"+v));

    }
}
使用properties把键值对数据写出到属性文件中去
public class PropertiesTest2 {
    public static void main(String[] args) throws Exception {
        //1.创建properties对象,先用他存储一些键值对数据
        Properties properties =new Properties();
        properties.setProperty("张三","123");
        properties.setProperty("李四","456");

        //2.把properties中的键值对数据存入到属性文件中去
        properties.store(new FileWriter("properties-xml-log-app\\src\\users2.properties"),"cc");

    }
}

XML 可扩展标记语言

  1. XML是由标签组成的
  2. XML中的标签名可以自己定义(可扩展)
  3. XML中只能有一个根标签
  4. XML中的标签可以有属性
  5. 如果一个文件中放置的是XML格式的数据,后缀是.xml
语法规则
  • XML中书写 < & ' " 会导致冲突,可以用如下字符代替
&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; ' 单引号
&quot; " 双引号
  • XML中可以写一个叫CDATA 的数据区:<![CDATA[....内容....]]>,里边内容可以随便写
<data>
<![CDATA[
3 <2  && 5 > 4
]]>
</data>
使用程序读取XML文件中的数据(Dom4j)

public class Dom4jTest1 {
    public static void main(String[] args) throws Exception {
        //1.创建一个Dom4j框架提供的解析器对象
        SAXReader saxReader = new SAXReader();

        //2.使用saxReader对象吧需要解析的文件读成Document文件
        Document document = saxReader.read("properties-xml-log-app\\src\\helloword.xml");

        //3.从文档对象中解析xml文件的全部信息
        Element root = document.getRootElement();
        System.out.println(root.getName());

        //4.获取根元素下的全部一级子元素
        //        List<Element> elements = root.elements();

        //指定获取 user
        List<Element> elements = root.elements("user");
        for (Element element : elements) {
            System.out.println(element.getName());
        }

        //5.获取当前元素下的某个子元素
        Element people = root.element("people");
        System.out.println(people.getText());

        //如果有很多子元素,默认获取第一个
        Element user = root.element("user");
        System.out.println(user.elementText("name"));

        //6.获取元素的属性信息
        Attribute id = user.attribute("id");
        System.out.println(id.getName());
        System.out.println(id.getValue());

        //7.获取全部文本内容
        System.out.println(user.elementText("name"));
        System.out.println(user.elementText("sex"));
        System.out.println(user.elementText("password"));

        Element data = user.element("data");
        System.out.println(data.getText());
        System.out.println(data.getTextTrim());//读取文本去除空格


    }
}
使用程序把数据写出到XML文件中去

直接把程序里的数据拼接成XML格式,然后IO流写出去

public class Test2 {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n");
        sb.append("<book>\r\n");
        sb.append("<name>从入门到跑路</name>\r\n");
        sb.append("</book>\r\n");

        try (
                BufferedWriter bw = new BufferedWriter(new FileWriter("properties-xml-log-app\\src\\book.xml"));
                ){
            bw.write(sb.toString());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}
约束XML文件的书写

就是限制XML文件只能按照某种格式书写,比如:限制标签,属性应该怎么写

  • DTD文档
  • Schema文档:可以约束数据类型

日志文件

  • 可以将系统执行的信息,方便的记录到指定的位置(控制台,文件,数据库)
  • 可以随时以开关的形式控制日志的启停,无需侵入到源代码中进行修改

LogBack: slf4j-api 日志接口 logback-core logback-classic

必须把logback.xml(对LogBack日志框架进行控制)直接拷贝到src目录下

public class LogBackTest1 {
    public static final Logger LOGGER = LoggerFactory.getLogger("LogBackTest");
    public static void main(String[] args) {
        //创建一个Logger日志对象
        try{
            LOGGER.info("chu方法开始执行---");
            chu(10,0);
            LOGGER.info("chu方法执行成功---");
        }catch(Exception e){
            LOGGER.error("chu方法执行失败了,出现了bug");
        }
    }

    public static void chu(int a,int b){
        int c = a/b;
        System.out.println("结果是:"+c);
    }
}
logback.xml
<?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>D:/idea/log/data.log</file>
    <!--指定日志文件拆分和压缩规则-->
    <rollingPolicy
      class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
      <!--通过指定压缩文件名称,来确定分割文件方式-->
      <fileNamePattern>D:/idea/log/data%i-%d{yyyy-MM-dd}.log.gz</fileNamePattern>
      <!--文件拆分大小-->
      <maxFileSize>1MB</maxFileSize>
    </rollingPolicy>
  </appender>

  <!--
  level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR    |    ALL 和 OFF
  , 默认debug
  <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
  -->
  <!--ALL 开启日志  OFF 关闭日志-->
  <root level="ALL">
    <!-- 注意:如果这里不配置关联打印位置,该位置将不会记录日志-->
    <appender-ref ref = "CONSOLE"/>
    <appender-ref ref="FILE" />
  </root>
</configuration>
logback设置日志级别

优先级由低到高

日志级别

说明

trace

追踪,指明程旭运行轨迹

debug

调试,实际应用中一般将其作为最低级别,而trace很少使用

info

输出重要信息, 数据连接, 网络连接, io操作等等, 使用较多

warn

警告问题, 可能会发生问题, 使用较多

error

错误信息, 使用较多

level 等于 info 时,只有大于等于 info 的日志才会被记录

<root level="ALL">
        <!-- 注意:如果这里不配置关联打印位置,该位置将不会记录日志-->
        <appender-ref ref = "CONSOLE"/>
        <appender-ref ref="FILE" />
    </root>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值