IT自学第十九天

IO

序列化,将对象存储到文件保存。

反序列化,将文件中的对象读取出来。

如果要一次序列化多个对象,咋整?

用一个ArrayList集合存储多个对象,然后直接对集合进行序列化即可。

注意:ArrayList集合已经实现了序列化接口。

代码演示:

java 复制代码
public class ObjectOutputStreamDemo1 {
    public static void main(String[] args) throws IOException {
        //目标:完成对象的序列化,把Java对象存储到文件中去
        //1、准备一个对象
        Student s = new Student("风驴子",27,"mazi666",160);
        ObjectOutputStream oos =
                new ObjectOutputStream(new FileOutputStream("day10-io-code/src/obj.txt"));
        //3、开始写对象出去
        oos.writeObject(s);
        //4、关闭资源
        oos.close();
    }
}

public class ObjectInputStreamDemo2{
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        //目标:对象反序列化,使用对象字节输入流管道把文件中的Java对象注入到内存中
        //1、创建对象字节输入流管道
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream("day10-io-code\\src\\obj.txt"));

        //2、读取对象进来(对象反序列化)
        Student s = (Student)ois.readObject();
        System.out.println(s);
        System.out.println(s.getAge());
        ois.close();
    }
}

13、IO框架

什么是框架?

  • 解决某类问题,编写的一套类、接口等,可以理解为一个半成品,大多框架都是第三方研发的。
  • 好处:在框架的基础上开发,可以得到优秀的软件架构,并能提高开发效率;
  • 框架的形式:一般是把类、接口等编译成class形式,再压缩成一个.jar结尾的文件发行出去。

什么是IO框架?

  • 封装了Java提供的对文件、数据进行操作的代码,对外提供了更简单的方式来对文件进行操作,对数据进行读写等。

步骤:导入commons-io-2.11.0.jar框架到项目中去。

Commons-io

  • Commons-io是apache开源基金组织提供的一组有关IO操作的小框架,目的是提高IO流的开发效率;

14、复制文件夹

代码演示:

java 复制代码
    public static void copyDirectory(File srcDir,File destDir) throws IOException {
        //1、可以先进行判断
        if(srcDir == null || destDir == null || !srcDir.exists() || !destDir.exists() || srcDir.isFile() || destDir.isFile()){
            return;
        }
        //2、开始拷贝之前,先在目标位置创建新文件夹名和源文件夹名称一样
        File destNewDir = new File(destDir,srcDir.getName());
        destNewDir.mkdirs();

        //3、提取原始目录的一级文件对象
        File[] files = srcDir.listFiles();

        //4、判断这个目录下是否可以拿到一级文件对象,一级是否存在一级文件对象。
        if(files == null || files.length == 0) return;

        //5、遍历全部一级文件对象,拷贝到目录文件夹
        for(File file : files){
            if(file.isFile()){
                //源文件:file
                //目标文件:destNewDir + file.getName();
                FileUtils.copyFile(file,new File(destNewDir,file.getName()));
            }else{
                copyDirectory(file,destNewDir);
            }
        }
    }

15、删除文件夹

删除文件夹内的全部文件

java 复制代码
public class DeleteDirDemo2 {
    public static void main(String[] args) {
        //目标:删除文件夹

    }
    public static void deleteDir(File dir){
        //1、不删除的情况
        if(dir == null || !dir.exists()) return;
        //2、如果是文件直接删除
        if(dir.isFile()) {
            dir.delete();
            return;
        }

        File[] files = dir.listFiles();

        //3、判断是否有权限进行删除
        if(files == null) return;

        //4、如果是空文件价,则直接删除
        if(files.length == 0){
            dir.delete();
            return;
        }

        //5、遍历全部一级文件对象,删除他们,再删除文件夹自己。
        for(File file : files){
            if(file.isFile()){
                file.delete();
            }else{
                deleteDir(file);
            }
        }
        dir.delete();  //删除自己
    }
}

16、啤酒问题


1、特殊文件和日志概述

特殊文件:

  • 存储有关系的数据,作为系统的配置文件;
  • 作为信息进行传输。

这些特殊文件,我们主要学什么?

了解他们的特点、作用;学习使用程序读取它们里面的数据;学习使用程序把数据存储到这些文件里。

日志技术:

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

2、Properties

属性文件Properties

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

Propertise

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

使用Properties读取属性文件里的键值对数据

修改文件属性的编码:

代码演示:

java 复制代码
public class PropertiesDemo1 {
    public static void main(String[] args) throws IOException {
        //目标:Properties读取属性文件中的键值对数据
        //1、创建属性集对象,代表一个属性文件
        Properties properties = new Properties();
        System.out.println(properties);

        //2、加载属性文件信息到属性集对象中去
        InputStream input = new FileInputStream("day11-special-file-log-code\\src\\users.properties");
        properties.load(input);
        System.out.println(properties);
        System.out.println(properties.get("赵敏"));
        System.out.println(properties.getProperty("赵敏"));
        System.out.println("--------------");
        Set<String> keys = properties.stringPropertyNames();
        for (String key : keys) {
            System.out.println(key + "=" + properties.getProperty(key));
        }
        System.out.println("-----------");
        properties.forEach((key, value) -> System.out.println(key + "=" + value));
    }
}

使用Properties把键值对数据写出到属性文件里去

代码演示:

java 复制代码
public class PropertiesDemo2 {
    public static void main(String[] args) throws IOException {
        //目标:掌握使用Properties将键值对数据写出去到属性文件中去
        //1、创建属性集对象
        Properties properties = new Properties();
        properties.setProperty("admin","666666");
        properties.setProperty("玄冥二老","wangfei");
        properties.setProperty("金毛狮王","成昆");
        properties.setProperty("小昭","wuji");
        //2、存储到文件
        properties.store(new FileOutputStream("day11-special-file-log-code\\src\\users2.properties"),"I saved many users! give me 100!");
    }
}

3、案例

注意:属性文件的用法,也可以使用普通文件进行。读取普通文件内容,并进行数据处理。

需求:遍历属性文件中的内容,修改属性值的内容

java 复制代码
public class PropertiesTest3 {
    public static void main(String[] args) throws IOException {
        //1、创建Properties对象
        Properties properties = new Properties();
        //2、加载属性文件中的键值对数据
        properties.load(new FileReader("day11-special-file-log-code\\src\\people.txt"));
        //3、判断是否存在李芳,存在把其值改为18
        if(properties.containsKey("李芳")){
            properties.setProperty("李芳","18");
        }else{
            System.out.println("没有此文件");
        }
        //4、拓展性文件对象,重新存入属性文件中去
        properties.store(new FileWriter("day11-special-file-log-code\\src\\people.txt"),"give me 100 fen!");
    }
}

4、xml的创建

XML(可扩展标记语言)

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

XML的特点

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

XML的创建

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

XML的语法规则

代码演示:

XML 复制代码
<?xml version="1.0" encoding="UTF-8" ?>
<!--以下是一个新的XML文件 -->
<user>
    <user>
        <name>张全蛋</name>
        <sex>男</sex>
        <age>32</age>
        <hobby>炸鸡</hobby>
        <sql>
            select * from tb_student where age &gt;= 18 &amp;&amp; age &lt;= 35
        </sql>
    </user>
    <user id="2" desc="这是一个脱口秀演员">
        <name>何广智</name>
        <sex>男</sex>
        <age>28</age>
        <hobby>脱口秀</hobby>
        <sql>
            <![CDATA[
                select * from tb_student where age >= 18;
            ]]>
        </sql>
    </user>
</user>

XML的作用和应用场景

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

5、dom4j解析XML

解析XML文件

  • 使用程序读取XML文件中的数据

步骤:使用Dom4J解析出XML文件

需求:使用Dom4J把一个XML文件的数据进行解析

分析:

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

Dom4J解析XML-得到Document对象

  • SAXReader:Dem4j提供的解析器,可以认为是代表整个Dom4j框架
  • Document
相关推荐
悟空码字2 小时前
SpringBoot集成Hera,分布式应用监控与追踪解决方案
java·springboot·编程技术·后端开发·hera
砚边数影2 小时前
Java基础强化(三):多线程并发 —— AI 数据批量读取性能优化
java·数据库·人工智能·ai·性能优化·ai编程
悟能不能悟2 小时前
.jrxml和.jasper文件是什么关系
java
一然明月2 小时前
C#语言基础详解和面向对象编程核心概念与高级特性详解(万字详解带示例代码)
开发语言·c#
宵时待雨2 小时前
数据结构(初阶)笔记归纳4:单链表的实现
c语言·开发语言·数据结构·笔记·算法
WHOVENLY2 小时前
揭秘正则表达式的基础语法与应用
开发语言·javascript·正则表达式
大雨淅淅2 小时前
【开发工具】Postman从入门到精通:环境搭建与使用全攻略
开发语言·lua
flysh052 小时前
.NET 基础 - StringBuilder 类
开发语言·c#·编程语言·c#10
ask_baidu2 小时前
监控Source端Pg对Flink CDC的影响
java·大数据·postgresql·flink