特殊文件、日志技术

属性文件

格式

属性文件后缀以.properties结尾

属性文件里面的每一行都是一个键值对,键和值中间用=隔开。比如: admin=123456

#表示这样是注释信息,是用来解释这一行配置是什么意思

每一行末尾不要习惯性加分号,以及空格等字符;不然会把分号,空格会当做值的一部分

键不能重复,值可以重复

Properties类

示例代码:

//读取属性文件
public static void main(String[] args) throws Exception {
    Properties ppts = new Properties();
    FileReader fileReader = new FileReader("01.Properties");
    //通过字符流读取属性文件内数据,加载进Properties对象
    ppts.load(fileReader); 
    System.out.println(ppts);

    //获取所有的Key键
    Set<String> strings = ppts.stringPropertyNames();

    //增强for遍历键
    for (String s : strings) {
        //通过键获取值
        System.out.println(s + "=" +  ppts.getProperty(s)); 
    }
}

//写入数据文件
public static void main(String[] args) throws Exception {
    Properties ppts = new Properties();

    //设置键值对
    ppts.setProperty("dbname","root");
    ppts.setProperty("dbpassword","123456");
    ppts.setProperty("dbport","3306");
    ppts.setProperty("dbtype","MySql");

    FileWriter fileWriter = new FileWriter("01.Properties");

    //将键值对写入属性文件,引号内为注释,可留空
    ppts.store(fileWriter,"");
    System.out.println(ppts);
}

XML文件

特点

标签一般成对出现

标签名可以自定义,但必须要正确嵌套

只能有一个根标签

可以有属性

第一行必须有文档声明,格式是固定的<?xml version="1.0" encoding="UTF-8"?>

XML文件必须以.xml为后缀结尾

注意事项

<,>,&等这些符号不能出现在标签的文本中,因为标签格式本身就有<>,会和标签格式冲突。

如果标签文本中有这些特殊字符,需要用一些占位符代替。

&lt; 表示 <
&gt; 表示 >
&amp; 表示 &
&apos; 表示 ‘
&quot; 表示 “

如果在标签文本中,出现大量的特殊字符,不想使用特殊字符,可以用CDATA区:

<![CDATA[

3 < 2 && 5 > 4

]]>

XML解析

使用Dom4j框架解析:需要去官网下载 导进项目

Dom4J解析XML文件的思想是:文档对象模型(意思是把整个XML文档、每一个标签、每一个属性都等都当做对象来看待)。Dowument对象表示真个XML文档、Element对象表示标签(元素)、Attribute对象表示属性、标签中的内容就是文本

Dom4J解析XML实例代码:

public static void main(String[] args) throws Exception {
    //创建解析器对象,用于解析xml文件
    SAXReader saxReader = new SAXReader();
    //读取xml文件,封装成文档对象
    Document document = saxReader.read("day11/src/com/itheima/b_xml/helloworld.xml");
    //获得根元素
    Element rootElement = document.getRootElement();
    //获得当前元素的名字
    String name = rootElement.getName();
    System.out.println("根元素标签名:" + name);
    //获得当前元素的所有子元素
    List<Element> elementList = rootElement.elements();
    //遍历子元素
    for (Element element : elementList) {
        String elementName = element.getName();
        String idValue = element.attributeValue("id");
        System.out.println(elementName + "属性值:" + idValue);
        List<Element> elements = element.elements();
        for (Element ele : elements) {
            String eleName = ele.getName();
            String text = ele.getText();
            System.out.println(eleName + "标签的文本内容为:" + text);
        }
    }
}
XML约束

DTD约束案例:

<!ELEMENT 书架(书+)>   表示根标签是<书架>,并且书架中有子标签<书>
<!ELEMENT 书(书名、作者、售价)> 表示书是一个标签,且书中有子标签<书名>、<作者>、<售价>
<!ELEMENT 书名(#PCDATA)>	表示<书名>是一个标签,且<书名>里面是普通文本
<!ELEMENT 作者(#PCDATA)>	表示<作者>是一个标签,且<作者>里面是普通文本
<!ELEMENT 售价(#PCDATA)>	表示<售价>是一个标签,且<售价>里面是普通文本

Schame约束案例:

<?xml version="1.0" encoding="UTF-8" ?>
<!-- xsd约束的根标签为<schema> xmlns="http://www.w3.org/2001/XMLSchema"(该文件被W3C的提供的内容约束)-->
<!-- targetNamespace="http://www.itcast.cn"(指定当前约束的URL) 网址不需要存在(和其他的XSD约束不重复)-->
<!-- elementFormDefault="qualified" (质量良好的约束文件)-->

<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.itcast.cn"
        elementFormDefault="qualified">
    <!-- 通过标签的方式来进行约束的声明 <element name='标签名'> -->
    <element name="students">
        <complexType>
            <sequence>
                <element name="student" minOccurs="1" maxOccurs="unbounded">
                    <complexType>
                        <sequence>
                            <element name="id" type="string"/> <!-- 简单元素的声明 -->
                            <element name="name" type="string"/> <!-- 简单元素的声明 -->
                            <element name="age" type="int"/> <!-- 简单元素的声明 -->
                        </sequence>
                        <attribute name="name" type="string" use="required"/>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

日志技术

好处

日志可以将系统执行的信息,方便的记录到指定位置,可以是控制台、可以是文件、可以是数据库中。

日志可以随时以开关的形式控制启停,无需侵入到源代码中去修改。

Logback快速入门

logback.xml配置文件,必须是在src目录下

示例代码:

public class Demo {
    //获得一个日志记录器对象
    public final static Logger logger = LoggerFactory.getLogger(Demo.class);

    public static void main(String[] args) {

        //通过记录器对象来记录日志信息

        logger.trace("系统的调试信息,比较基本信息");
        logger.debug("系统的调试信息,方便追踪程序的执行流程");
        logger.info("系统中产生的普通信息");
        logger.warn("系统的警告信息");
        logger.error("系统产生的异常信息");
    }
}
日志配置文件–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>log/data.log</file>
        <!--指定日志文件拆分和压缩规则-->
        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--通过指定压缩文件名称,来确定分割文件方式-->
            <fileNamePattern>log/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>
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
JavaSE

JavaSE:面向对象

2024-3-22 20:19:20

面向对象其他知识点

2024-3-25 21:29:14

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索