特殊文本文件、日志技术

特殊文件 

为什么要用这些特殊文件? 存储多个用户的:用户名、密码

特殊文件:Properties属性文件

特点:

  1. 都只能是键值对
  2. 键不能重复
  3. 文件后缀一般是.properties结尾的

作用:存储一些有关系的键值对数据

 Properties

  • 是一个Map集合(键值对集合),但是我们一般不会当集合使用。
  • 核心作用:Properties是用来代表属性文件的,通过Properties可以读写属性文件里的内容

admin=123456
张无忌=minmin
周芷若=wuji
赵敏=wuji
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Properties;
import java.util.Set;/*** 目标:掌握使用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("D:\\code\\idea-javacode\\javaseproject\\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(properties.getProperty("周芷若"));//4.遍历全部的键和值Set<String> keys = properties.stringPropertyNames();//拿到全部键的集合/*for (String key : keys) {//拿到全部键之后再去遍历这些键 遍历这些键之后根据键来取值String value = properties.getProperty(key);//把键填进去就得到值了//然后把键和对应的值输出System.out.println(key + "---->" + value);}*///Lambda表达式 ???properties.forEach((k,v) ->{System.out.println(k + "---->" + v);});}
}

import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;/*** 目标:掌握把键值对数据存入到属性文件里面去*/
public class PropertiesTest2 {public static void main(String[] args) throws Exception {//1.创建Properties对象,先用他存储一些键值对数据/*Properties properties = new Properties();properties.setProperty("张无忌","minmin");properties.setProperty("殷素素","cuishan");properties.setProperty("张翠山","susu");// 2、把properties对象中的键值对数据存入到属性文件中去properties.store(new FileWriter("D:\\code\\idea-javacode\\javaseproject\\properties-xml-log-app\\src\\user2.properties"),"i saved many users!");//这个管道不用自己关闭,这个管道是作为一个参数给store方法,他内部用完这个管道之后他会帮你关,所有不用管*///1.加载属性文件的键值对到程序中来Properties properties = new Properties();//2.开始加载properties.load(new FileReader("D:\\code\\idea-javacode\\javaseproject\\properties-xml-log-app\\src\\user2.properties"));//此时已经把键值对数据给到集合里边来了//3.判断是否包含张翠山这个键 有则修改他的值为18就行了(毕竟是个map集合)if(properties.containsKey("张翠山")){//map集合看有没有包含这个键properties.setProperty("张翠山","18");//来改这个数据}//这里改了但是不会存进文件中,只是将properties容器中的内容改好了//4.把properties对象的键值对(里面的内容)写出去到属性文件中去properties.store(new FileWriter("D:\\code\\idea-javacode\\javaseproject\\properties-xml-log-app\\src\\user2.properties"),"success");//store是写入,然后new一个FileWriter通向的还是这个路径,后面要有注释}
}
#success
#Fri Mar 15 19:55:13 CST 2024
张无忌=minmin
张翠山=18
殷素素=cuishan


特殊文件:XML文件

概述

XML(全称EXtensibleMarkup Language,可扩展标记语言)

  • 本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系。

XML的特点

  • XML中的“<标签名>”称为一个标签或一个元素,一般是成对出现的。
  • XML中的标签名可以自己定义(可扩展),但必须要正确的嵌套。
  • XML中只能有一个根标签。
  • XML中的标签可以有属性,
  • 如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml。

XML的创建

  • 就是创建一个XML类型的文件,要求文件的后缀必须使用xml,如hello world.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!--注释:以上抬头声明必须有,必须放在第一行 -->
<!-- 根标签只能有一个 -->
<users><user id="1"><name>张三</name><sex>男</sex><age>21</age><地址>北京</地址><password>666888wyf</password><data> 3 &lt; 2 &amp;&amp; 5 > 4 </data><!--  CD 特殊数据区 : 可以写任意内容--><data><![CDATA[3 < 2 && 5 > 4]]></data></user><user id="2"><name>李四</name><sex>男</sex><age>24</age><地址>广州</地址><password>lzxfff666</password></user>
</users>

XML的作用和应用场景

  • 本质是一种数据格式,可以存储复杂的数据结构,和数据关系,
  • 应用场景:经常用来做为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输
读取XML文件中的数据(解析XML文件)

注意:程序员并不需要自己写原始的IO流代码来解析XML,难度较大!也相当繁琐!
其实,有很多开源的,好用的,解析XML的框架,最知名的是:Dom4j(第三方研发的) 

步骤:使用Dom4j解析出XML文件
需求:使用Dom4]把一个XML文件的数据进行解析
分析:

  1. 下载Dom4i框架,官网下载。
  2. 在项目中创建一个文件夹:lib
  3. 将dom4j-2.1.3.jar文件复制到 lib 文件夹
  4. 在jar文件上点右键,选择 Add as Library ->点击OK
  5. 在类中导包使用

DOM4j解析XML文件的思想:文档对象模型

dom4j解析xml文件是一种自上而下的解析思想。(必须先拿到文档对象,再通过文档对象拿到根元素对象,之后才可以根据根元素对象拿到子元素对象,再通过子元素对象拿到他下面的子元素对象,从父到子,一级一级的解析)

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.List;/*** 目标:掌握Dom4j框架解析XML文件*/public class Dom4JTest1 {public static void main(String[] args) throws Exception {//1.创建一个Dom4j框架提供的解析器对象SAXReader saxReader = new SAXReader();//这个对象也是代表整个Dom4j框架的//2.使用saxReader对象把需要解析的XML文件读成一个Document对象。//saxReader.read("D:\\code\\idea-javacode\\javaseproject\\properties-xml-log-app\\src\\helloworld.xml");//此时只是把xml文件读成一个文档对象//然后把他交给一个文档类型的变量document来记住Document document =saxReader.read("D:\\code\\idea-javacode\\javaseproject\\properties-xml-log-app\\src\\helloworld.xml");//这时这个文档对象就会代表整个XML文件的//3.从文档对象中解析XML文件的全部数据Element root = document.getRootElement();//获得根元素对象也就是<users>这个根元素对象 --> 把他交给一个Element类型的变量root(根元素对象)指代的就是<users>这个根元素//System.out.println(root.getName());//4.获取根元素下的全部一级子元素//List<Element> elements = root.elements();//把一级子元素放到一个集合中给我们 -> 遍历集合中的一级子元素对象 elements.forList<Element> elements = root.elements("user");//声明一个名字专门拿某些子元素for (Element element : elements) {System.out.println(element.getName());//通过子元素拿到名字   //user user}//5.获取当前元素下的某个子元素(1.可以拿到所有的一级子元素通过索引去拿 2.指定:调用element方法来定位单个子元素)Element people = root.element("people");System.out.println(people.getText());      //很多人//如果下面有很多子元素user,默认拿第一个Element user = root.element("user");System.out.println(user.elementText("name"));//elementText()是会去拿下面子元素name的文本内容     //张三//6.如何去获取元素的属性信息呢?System.out.println(user.attributeValue("id"));//   1Attribute id = user.attribute("id");System.out.println(id.getName());    //  idSystem.out.println(id.getValue());    //   1//拿所有的属性List<Attribute> attributes = user.attributes();//会把所有的属性放到这个集合里边去//遍历这些属性for (Attribute attribute : attributes) {System.out.println(attribute.getName() + "=" + attribute.getValue());//id=1  \r\n   desc=第一个用户}//7.如何获取全部的文本内容:获取当前元素下的子元素文本值//通过user子元素调用elementText()取他下面的子元素的文本System.out.println(user.elementText("name"));  //张三System.out.println(user.elementText("地址"));     //北京System.out.println(user.elementText("password"));  //666888wyf//!!!!!!!!根据根元素子元素在拿到下面的子元素对象,再通过子元素对象直接getText获取他的文本Element data =user.element("data");System.out.println(data.getText());   // 3 < 2 && 5 > 4System.out.println(data.getTextTrim());// 取出文本去除前后空格   //3 < 2 && 5 > 4}
}

如何使用程序把数据写出到XML文件中去?不建议用dom4j做,很复杂。

推荐直接把程序里的数据拼接成XML格式,然后用IO流写出去!(这样的需求比较少,了解)


import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.Buffer;/*** 目标:如何使用程序把数据写出到XML文件中去* <?xml version="1.0"encoding="UTF-8"?>* <book>*     <name>从入门到跑路</name>*     <author>yf</author>*     <price>999.99</price>* </book>*/public class Dom4JTest2 {public static void main(String[] args) {//1、使用一个StringBuilder对象来拼接XML格式的数据。StringBuilder sb = new StringBuilder();sb.append("<?xml version=\"1.0\"encoding=\"UTF-8\"?>\r\n");sb.append("<book>\r\n");sb.append("\t<name>").append("从入门到跑路").append("</name>\r\n");sb.append("\t<author>").append("yf").append("</author>\r\n");sb.append("\t<price>").append("999.99").append("</price>\r\n");sb.append("</book>");///拼接好后接下来把他写出到xml文件中去//用一个缓冲字符输出流......try (BufferedWriter bw =new BufferedWriter(new FileWriter("D:\\code\\idea-javacode\\javaseproject\\properties-xml-log-app\\src\\users.properties"));){bw.write(sb.toString());//把StringBuilder打成字符串} catch (Exception e) {e.printStackTrace();}}
}

补充知识:约束XML文件的编写[了解]
  • 就是限制XML文件只能按照某种格式进行书写

约束文档

  • 专门用来限制xml书写格式的文档,比如:限制标签、属性应该怎么写。

约束文档的分类

  • DTD文档
  • Schema文档

日志技术 

概述

 把程序运行的信息,记录到文件中,方便程序员定位bug、并了解程序的执行情况等。

  • 日志:好比生活中的日记,可以记录你生活中的点点滴滴,
  • 程序中的日志,通常就是一个文件,里面记录的是程序运行过程中的各种信息

日志技术

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

日志技术体系、Logback日志框架的概述

Logback快速入门(!!!)

需求

  • 使用Logback日志框架,纪录系统的运行信息。

实现步骤

  1. 导入Logback框架到项目中去。
  2. 将Logback框架的核心配置文件logback.xml直接拷贝到src目录下(必须是src下)。
  3. 创建Logback框架提供的Logger对象,然后用Logger对象调用其提供的方法就可以记录系统的日志信息。

注意:对Logback日志框架的控制,都是通过其核心配置文件logback.xml来实现的。

日志的输出位置、输出格式的设置

  • 通常可以设置2个输出日志的位置:一个是控制台、一个是系统文件中
<appender name="CONSOLE" class="ch.gos.logback.core.ConsoleAppender">
<appender name="FILE" class="ch.gos.logback.core.rolling.RollingfileAppender">

开启日志(ALL),取消日志(OFF)

<root level="ALL"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE" />
</root>

 指定日志文件的拆分和压缩规则(重点):系统日志都流向这个文件,一直积累会非常大;所以在开发中,为了避免日志文件过大,在logback日志文件中配置“日志文件的拆分和压缩规则”。

(一旦这个日志文件到1MB,就会把他压缩成一个日志文件,然后又重新的记录日志,如果又到达1MB,又把这个日志文件压缩成一个新的日志文件中存储,重复!这样就会保证每个日志文件不会超过1MB)

Logback设置日志级别(特别重要!!!)

日志级别指的是日志信息的类型,日志都会分级别,常见的日志级别如下(优先级依次升高):

合理的输出日志级别,方便我们更好的查询日志信息。开发中为了程序员方便定位问题,不想系统记录全部的日志级别信息,如果只想记录info、warn、error日志:就必须需要用到设置日志级别的技术来控制了。

<root level=info"><appender-ref ref="CONSOLE"/><appender-ref ref="FILE" />
</root>
  • 只有日志的级别是大于或等于核心配置文件配置的日志级别,才会被记录,否则不记录。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解MySql索引

目录 一 、概念 二、使用场景 三、索引使用 四、索引存在问题 五、命中索引问题 六、索引执行原理 一 、概念 索引是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。暂时可以理解成C语言的指针,文章后面详解 二、使用场景 数据量较大&#xff0c;且…

苹果Vision Pro即将在中日韩等九国开卖 | 百能云芯

苹果公司近期透露&#xff0c;首款混合实境&#xff08;MR&#xff09;头盔「Vision Pro」即将在今年晚些时候推向更多国家销售。虽然苹果尚未公布具体的销售细节&#xff0c;但根据最新的外媒报道&#xff0c;这款高科技产品可能即将在中国、日本、韩国等九个国家开卖&#xf…

Rust写一个wasm入门并在rspack和vite项目中使用(一)

rust打包wasm文档 文档地址 安装cargo-generate cargo install cargo-generate 安装过程中有问题的话手动安装cargo-generate下载地址 根据自己的系统下载压缩包&#xff0c;然后解压到用户/.cargo/bind目录下&#xff0c;将解压后的文件放到该目录下即可。 创建wasm项目 …

【Miniconda】一文了解conda虚拟环境的作用

【Miniconda】一文了解conda虚拟环境的作用 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f448; 希望得到您的订阅和支持~ &am…

VMwareWorkstation16与Ubuntu 22.04.6 LTS下载与安装

一、准备工作 VMware Workstation Pro 16官网下载&#xff1a; https://customerconnect.vmware.com/cn/downloads/info/slug/desktop_end_user_computing/vmware_workstation_pro/16_0。下载需要账号登录。 二、安装 双击exe文件稍等一会会弹出安装程序&#xff0c;如图 这…

基于Linux内核的socket编程(TCP)的C语言示例

原文地址&#xff1a;https://www.geeksforgeeks.org/socket-programming-cc/ 服务端&#xff1a; #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <unistd.h>#…

盒子IM开源仿微信聊天程序源码,可以商用

安装教程 1.安装运行环境 安装node:v14.16.0安装jdk:1.8安装maven:3.6.3安装mysql:5.7,密码分别为root/root,运行sql脚本(脚本在im-platfrom的resources/db目录)安装redis:5.0安装minio&#xff0c;命令端口使用9001&#xff0c;并创建一个名为”box-im”的bucket&#xff0c…

分享一篇Oracle RAC实战安装11G

分享一次很久以前的Oracle rac项目实施。 1、拓扑结构 基础环境是2台H3C的服务器2台3PAR的双活存储&#xff0c;操作系统centos7.2。借用下别人家的拓扑先&#xff08;这是一套典型的RAC架构&#xff09;。 2、网卡TEAM操作 以eno51和en052组成Team1组为示例&#xff1a; nm…

职场中的“跨界思维”:如何拓宽你的职业发展道路?

在当今职场&#xff0c;单一技能的竞争已经越来越激烈&#xff0c;具备跨界思维的人才越来越受到企业的青睐。本文将探讨职场中的“跨界思维”&#xff0c;帮助您拓宽职业发展道路&#xff0c;提升自身竞争力。 一、什么是跨界思维&#xff1f; 跨界思维&#xff0c;顾名思义&a…

GAMES104-现代游戏引擎 1

主要学习重点还是面向就业&#xff0c;重点复习八股和算法 每天早上八点到九点用来学习这个课程 持续更新中... 第一节 游戏引擎导论 第二节 引擎架构分层

upload-labs通关方式

pass-1 通过弹窗可推断此关卡的语言大概率为js&#xff0c;因此得出两种解决办法 方法一 浏览器禁用js 关闭后就逃出了js的验证就可以正常php文件 上传成功后打开图片链接根据你写的一句话木马执行它&#xff0c;我这里采用phpinfo&#xff08;&#xff09; 方法二 在控制台…

如何用人工智能实现客户服务营销?实用指南与关键技巧一网打尽

在不断发展的营销领域&#xff0c;创意是成功营销活动的生命线。火花点燃兴趣&#xff0c;吸引受众&#xff0c;推动参与。但是&#xff0c;如果有一种方法可以利用技术来提升创意&#xff0c;那会怎样呢&#xff1f;生成式人工智能&#xff08;Generative AI&#xff09;是一种…