Java进阶13讲__第11讲

news2024/11/14 14:20:06

配置文件

日志

1.  Properties属性文件

1.1  特点、作用

  1. 都只能是键值对
  2. 键不能重复
  3. 文件后缀一般是.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>&lt;80</grade>
    </user>
    <user id="2">
        <name>玄子</name>
        <grade><![CDATA[海神阁阁主99]]></grade>
    </user>
    <user id="3">
        <name>王秋儿</name>
        <grade>&gt;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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115837.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「iOS」折叠cell

iOS学习 前言简单的折叠cell效果原理 稍作修改总结 前言 在暑期仿写中&#xff0c;3G share项目里我们简单的使用了折叠cell。现在写一篇博客来总结该方法。 简单的折叠cell 效果 先看效果&#xff1a; 原理 将cell的高度设置为一个单元格的高度。创建一个按钮&#xff0…

【C++】作用域指针、智能指针、共享指针、弱指针

十、智能指针、共享指针 从上篇文章 【C】如何用C创建对象&#xff0c;理解作用域、堆栈、内存分配-CSDN博客 中我们知道&#xff0c;你的对象是创建在栈上还是在堆上&#xff0c;最大的区别就是对象的作用域不一样。所以在C中&#xff0c;一旦程序进入另外一个作用域&#xf…

【xinference】(19):在L40设备上通过Xinference框架,快速部署CogVideoX-5b模型,可以生成6秒视频,速度比409D快一点

1&#xff0c;关于Xinference Xorbits Inference (Xinference) 是一个开源平台&#xff0c;用于简化各种 AI 模型的运行和集成。借助 Xinference&#xff0c;您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理&#xff0c;并创建强大的 AI 应用。 htt…

鸿蒙开发笔记_电商严选01_登录页面(静态页面)

由于上班较忙,抽空闲暇时间,快速更新中。。。 效果图 登录页面(静态页面) import CommonConstants from ./CommonConstants;/*** 登录页面*/ // 输入文本框,的自定义样式扩展 // @Extend装饰器表示继承、扩展的意思。这里代表:自定义样式扩展 @Extend(TextInput) functio…

Qt使用小技巧之按钮动态变化

前言 最近写小demo中无意发现的&#xff0c;是想实现当鼠标悬停到按钮上面的时候&#xff0c;按钮实现动态变化&#xff0c;让人知道鼠标经过了按钮&#xff0c;效果如下 hoverDynamicPushButton 正文 首先是将按钮的边框给去掉&#xff0c;然后设置下它的悬停伪状态就行了 格…

linux日常使用命令总结

一、文件复制 在 Linux 中&#xff0c;复制文件是一个常见的操作&#xff0c;通常使用 cp 命令来完成。cp 命令提供了丰富的选项来满足不同的需求。下面是使用 cp 命令复制文件的一些基本用法和示例。 基本用法 cp 命令的基本语法如下&#xff1a; cp [选项] 源文件 目标文…

京东获得JD商品详情 API 返回值说明||京东商品详情数据采集API接口详解

item_get-获得JD商品详情 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheStri…

了解分布式事务与本地事物基本概念

一、本地事物 1、事物的基本性质 数据库事物的几个特性&#xff1a;原子性、一致性、隔离性、持久性&#xff0c;简称ACID&#xff1b; 原子性&#xff1a;一系列的操作整体不可拆分&#xff0c;要么全成功&#xff0c;要么同时失败。 一致性&#xff1a;数据在事物的前后&am…

SpringMVC上

SpringMVC介绍 MVC模型 MVC全称Model View Controller&#xff0c;是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分&#xff1a; Model&#xff08;模型&#xff09;&#xff1a;指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用…

Typora教程

1 TyporaChina https://typorachina.com/guide/

【C语言必学知识点七】坚决不允许你还不知道C/C++程序如何对内存进行分区!!!

动态内存管理——详细解读C/C程序中的内存分区 导读一、C/C程序中的内存分区二、常见的动态内存的错误2.1 内存开辟失败后对空指针进行解引用2.2 对已开辟好的空间进行越界访问2.3 free不是有动态函数开辟的空间2.4 free动态内存开辟空间的一部分2.4.1 free函数的底层逻辑 2.5 …

【HarmonyOS】- 内存优化

文章目录 知识回顾前言源码分析1. onMemoryLevel2. 使用LRUCache优化ArkTS内存原理介绍3. 使用生命周期管理优化ArkTS内存4. 使用purgeable优化C++内存拓展知识1. Purgeable Memory总结知识回顾 前言 当应用程序占用过多内存时,系统可能会频繁进行内存回收和重新分配,导致应…

Excel文档的读取【2】

读取了工作簿对象后&#xff0c;下一步就是读取指定的工作表。每个工作簿中&#xff0c;都包含一个或多个工作表。每个工作表&#xff0c;都有一个名称。阿珍收到的Excel文件&#xff0c;由两个工作表组成&#xff0c;分别为“销售商品”和“销售订单数据”。 使用print输出…

基于移动互联网的校内物业报修管理系统设计与实现(论文+源码)_kaic

基于移动互联网的校内物业报修管理系统设计与实现 摘  要 校园后勤服务对于学校的发展至关重要&#xff0c;它不仅是学校管理的基石&#xff0c;也是实现教育目标的关键因素&#xff0c;为学生提供优质的生活环境。如果学校能够提供出色的后勤保障&#xff0c;让师生无需担心…

【生日视频制作】保时捷车主提车交车仪式感AE模板修改文字软件生成器教程特效素材【AE模板】

生日视频制作教程保时捷车主提车交车仪式感AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程 怎么如何做的【生日视频制作】保时捷车主提车交车仪式感AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤&#xff1a; 下载AE模板 安装AE软件 把AE模板导入…

240908-Linux通过ln设置软链接关联大模型文件

在Linux中&#xff0c;您可以使用ln命令来创建软链接&#xff08;符号链接&#xff09;。软链接是一种特殊类型的文件&#xff0c;它指向另一个文件或目录。以下是如何设置软链接的步骤&#xff1a; 创建软链接 基本语法&#xff1a; ln -s [目标文件或目录] [软链接的名称]示…

【SpringBoot】电脑商城-12-订单功能

创建订单 1 订单-创建数据表 1.使用use命令先选中store数据库。 USE store;2.在store数据库中创建t_order和t_order_item数据表。 CREATE TABLE t_order (oid INT AUTO_INCREMENT COMMENT 订单id,uid INT NOT NULL COMMENT 用户id,recv_name VARCHAR(20) NOT NULL COMMENT …

碎碎念,只是一些关于人工智能的随笔记录。

&#x1f96e;随笔 本篇将毫无逻辑&#xff0c;只是写到哪儿算哪儿&#xff0c;只是用来记录着玩儿。 关键学习期的概念 关键学习期&#xff08;Critical Learning Periods&#xff09;是一个在生物学和人工智能领域都有研究的概念。在生物学中&#xff0c;关键学习期指的是…

CAN总线的位同步详细讲解

接收方数据采样 &#xff08;1&#xff09;CAN总线没有时钟线&#xff0c;总线上的所有设备通过约定波特率的方式确定每一个数据位的时长 &#xff08;2&#xff09;发送方以约定的位时长每隔固定时间输出一个数据位 &#xff08;3&#xff09;接收方以约定的位时长每隔固定…

数据结构与算法——Java实现 4.数组

目录 一、数组 — 概述 1.定义 2.特点 3.公式 小测试 二、数组的性能 1.空间占用 2.随机访问 三、动态数组 1.实现动态数组 2.新增元素&#xff08;最后一个元素位置&#xff09; 3.新增元素、数组扩容 4.检查数组容量 5.类中定义的其他方法 ① 按索引查找元素 ② 返回数组长度…