10.IO流(一)

news2024/11/13 20:31:37

文章目录

  • IO流
    • 一、File
      • 1.创建对象
        • 1.1 创建File类的对象
        • 1.2 ==注意==
        • 1.3 绝对路径、相对路径
      • 2.常用方法1:判断文件类型、获取文件信息
      • 3.常用方法2:创建文件、删除文件
        • 3.1 File类创建文件的功能
        • 3.2 File类删除文件的功能
      • 4.常用方法3:遍历文件夹
        • 4.1 File类提供的遍历文件夹的功能
        • 4.2 使用listFiles()方法时的==注意事项==
    • 二、前置知识:方法递归
      • 1.认识递归的形式
        • 1.1 方法递归概述
        • 1.2 递归的形式
        • 1.3 使用方法递归是需要注意的问题
      • 2.应用、执行流程、算法思想
        • 2.1 ==递归算法三要素==
        • 2.2 案例:使用递归计算阶乘
      • 3.其他应用:文件搜索
        • 3.1 从D盘中搜索“QQ.exe”文件,找到后直接输出其位置
        • 3.2 删除非空文件夹
    • 三、前置知识:字符集
      • 1.常见字符集介绍
        • 1.1 标准ASCII字符集
        • 1.2 GBK(汉字内码扩展规范,国标)
        • 1.3 Unicode字符集(统一码,也叫万国码)
      • 2.字符集的编码、解码操作
        • 2.1 编码
        • 2.2 解码
    • 四、IO流
      • 1.认识IO流
      • 2.IO流的分类
        • 1.1 按流的方向分
        • 1.2 按流中数据的最小单位分
      • 3.IO流四大类
        • 3.1 字节输入流InputStream(读字节数据的)
        • 3.2 字节输出流OutputStream(写字节数据出去的)
        • 3.3 字符输入流Reader(读字符数据的)
        • 3.4 字符输出流Writer(写字符数据出去的)
    • 五、IO流-字节流
      • 1.文件字节输入流(FileInputStream):每次读取一个字节
      • 2.文件字节输入流(FileInputStream):每次读取多个字节
      • 3.文件字节输入流(FileInputStream):一次读取完全部字节
        • 方式一:定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节
        • 方式二:va官方为lnputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回
      • 4.文件字节输出流:写字节出去
      • 5.案例-文件复制
    • 六、释放资源的方式
      • 1.try-catch-finally
      • 2.try-with-resource
      • 3.案例

IO流

一、File

1.创建对象

1.1 创建File类的对象
构造器说明
public File(String pathname)根据文件路径创建文件对象(文件/文件夹/绝对路径/相对路径)
public File(String parent,String child)根据父路径和子路径名字创建文件对象
public FIle(File parent,String child)根据付路径文件对象和子路径名字创建文字对象
1.2 注意
  • File对象既可以代表文件、也可以代表文件夹
  • File封装的对象仅仅是一个路径名,这个路径可以是存在的,也允许是不存在的
1.3 绝对路径、相对路径
  1. 绝对路径:从盘符开始 (例 D:\\JavaCode\\a.txt 或 D:/JavaCode/a.txt)
  2. 相对路径:不带盘符,默认直接到当前工程下的目录寻找文件 (例 TxtFile\\a.txt 或 TxtFile/a.txt)

2.常用方法1:判断文件类型、获取文件信息

方法名称说明
public boolean exists()判断当前文件对象,对应的文件路径是否存在,存在返回true
public boolean isFile()判断当前文件对象指代的是否是文件,是文件返回true,反之
public boolean isDirectorv()判断当前文件对象指代的是否是文件夹,是文件夹返回true,反之。
public String getName()获取文件的名称 (包含后缀)
public long length()获取文件的大小,返回字节个数
public long lastModified()获取文件的最后修改时间
public String getPath()获取创建文件对象时,使用的路径
public String getAbsolutePath()获取绝对路径
import java.io.File;

public class FileDemo1 {
    public static void main(String[] args) {
        File file = new File("b.txt");
        File[] files = file.listFiles();
        for (File f : files) {
            System.out.println(f.getAbsoluteFile());
        }
    }
}

3.常用方法2:创建文件、删除文件

3.1 File类创建文件的功能
方法名称说明
public boolean createNewFile()创建一个新的空的文件
public boolean mkdir()只能创建一级文件夹
public boolean mkdirs()可以创建多级文件夹
3.2 File类删除文件的功能
方法名称说明
public boolean delete()删除文件、空文件夹

注意delete()默认只能删除文件和空文件夹,删除后的文件不会键入回收站

4.常用方法3:遍历文件夹

4.1 File类提供的遍历文件夹的功能
方法名称说明
public String[] list()获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回
public File[] listFiles()获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
4.2 使用listFiles()方法时的注意事项
  • 当主调是文件,或者路径不存在时,返回null
  • 当主调是空文件夹时,返回一个长度为0的数组
  • 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回
  • 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
  • 当主调是一个文件夹,但是没有权限访问该文件是,返回null

二、前置知识:方法递归

1.认识递归的形式

1.1 方法递归概述
  • 递归是一种算法,在程序设计语言中广泛应用
  • 从形式上说:方法调用自身的方式称为方法递归(recursion)
1.2 递归的形式
  • 直接递归:方法自己调用自己
  • 简介递归:方法调用其他方法,其他方法又回调自己
1.3 使用方法递归是需要注意的问题

递归如果没有控制好终止,会出现死循环,导致栈内存溢出错误(StackOverflowException)

2.应用、执行流程、算法思想

2.1 递归算法三要素
  • 递归的公式: f(n) = f(n-1) * n
  • 递归的终结点: f(1)
  • 递归的防线必须走向终结点
2.2 案例:使用递归计算阶乘
public class Demo1 {
    public static void main(String[] args) {
        System.out.println(factorial(5));
        System.out.println(sum(100));
    }

    //计算阶乘递归
    public static int factorial(int n) {
        //递归没有出口的话,报错: StackOverflowError 栈内存溢出
        if (n == 1) { //递归出口
            return 1;
        }
        return factorial(n - 1) * n;
    }

    //求和 递归
    public static int sum(int n) {
        if (n == 1) {
            return 1;
        } else {
            return sum(n - 1) + n;
        }
    }
}

3.其他应用:文件搜索

3.1 从D盘中搜索“QQ.exe”文件,找到后直接输出其位置
import java.io.File;
/**
 * @description: 在指定盘符下寻找 QQ.exe 文件【遍历查找,并输出此文件的绝对路径】
 */
public class QQFileFindDemo {
    public static void main(String[] args) {
        findQQ(new File("D:\\"));
    }

    //定义方法
    public static void findQQ(File file) {
        //1.判断路径是否存在
        if (!file.exists()) { //不存在直接结束方法
            return;
        }
        //2.判断路径是文件夹还是文件
            //2.1 文件
        if (file.isFile()) {
            if ("QQ.exe".equals(file.getName())) { //找到了
                System.out.println(file.getAbsolutePath()); //打印绝对路径
                return; //找到后结束方法
            }
        } else { //2.2 文件夹
            File[] files = file.listFiles();
            //如果没有权限访问的话,files就是null,直接结束方法
            if (files == null){
                return;
            }
            //说明文件夹可以访问,则递归调用 findQQ 方法继续查找
            for (File f : files) {
                findQQ(f);
            }
        }
    }
}
3.2 删除非空文件夹
import java.io.File;

public class DeleteSpecifyDir {
    public static void main(String[] args) {
        deleteDir(new File("E:\\abc"));
    }

    //删除非空文件夹
    public static void deleteDir(File file){
        //1.判断路径是否存在
        if (!file.exists()){ //不存在
            return;
        }
        //2. 文件夹
        File[] files = file.listFiles();
        if (files == null){
            return;
        }
        for (File f : files) {
            if (f.isFile()){
                f.delete();
            }else {
                deleteDir(f);
            }
        }
        //删除自己这个空文件夹
        file.delete();
    }
}

三、前置知识:字符集

1.常见字符集介绍

1.1 标准ASCII字符集
  • 美国信息交换标准代码,包括了英文、符号等。
  • 标准ASCII使用1个字节存储一个字符,首位是0,总共可表示128个字符,对美国佬来说完全够用
1.2 GBK(汉字内码扩展规范,国标)
  • 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储
  • 注意:GBK兼容了ASCII字符集【GBK规定:汉字的第一个字节的第一位必须是1】
1.3 Unicode字符集(统一码,也叫万国码)
  • Unicode是国际组织指定的,可以容纳世界上所有文字、符号的字符集

  • UTF-32 :4个字节表示一个字符

  • UTF-8

    • 是Unicode符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
    • 英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节
  • 要点

    • ASCI字符集:只有英文、数字、符号等,占1个字节
    • GBK字符集:汉字占2个字节,英文、数字占1个字节
    • UTF-8字符集:汉字占3个字节,英文、数字占1个字节

    注意

    注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,,否则会出现乱码

    注意2:英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码

2.字符集的编码、解码操作

2.1 编码
String提供了如下方法说明
byte[] getBytes()使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组
byte[] getBytes(String charsetName)使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组
2.2 解码
String提供了如下方法说明
String(byte[] bytes)通过使用平台的默认字符集解码指定的字节数组来构造新的String
String(byte[] bytes,String charsetName)通过指定的字符集解码指定的字节数组来构造新的String
import java.util.Arrays;

public class CharSetDemo1 {
    public static void main(String[] args) throws Exception {
        //编码操作
        byte[] bytes = "中".getBytes(); //按照平台默认的编码格式进行编码
        System.out.println(Arrays.toString(bytes));
		
        byte[] bytes1 = "中".getBytes("GBK"); //按照指定的编码格式GBK进行编码
        System.out.println(Arrays.toString(bytes1));
        
        //解码操作
        String str = new String(bytes,"GBK"); //按照指定的字符集对byte数组进行解码
        System.out.println(str);

        String str2 = new String(bytes1,"GBK");
        System.out.println(str2);
    }
}

四、IO流

1.认识IO流

  • I指Input,称为输入流:负责把数据读到内存中去
  • O指Output,称为输出流:负责写数据出去

2.IO流的分类

1.1 按流的方向分

IO流{1.输入流 2.输出流}

1.2 按流中数据的最小单位分

IO流:

  1. 字节流:适合操作所有类型的数据
  2. 字符流:只适合操作纯文本文件,比如:读写txt、java文件等

3.IO流四大类

3.1 字节输入流InputStream(读字节数据的)

以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流

3.2 字节输出流OutputStream(写字节数据出去的)

以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流

3.3 字符输入流Reader(读字符数据的)

以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流

3.4 字符输出流Writer(写字符数据出去的)

以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流。

五、IO流-字节流

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.文件字节输入流(FileInputStream):每次读取一个字节

FileInputStream(文件字节输入流)

  • 作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去
构造器说明
public FileInputStream(File file)创建字节输入流管道与源文件接通
public FileInputStream(String pathname)创建字节输入流管道与源文件接通
方法名称说明
public int read()每次读取一个字节返回,如果发现没有数据可读会返回-1.
public int read(byte[] buffer)每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1.
import java.io.File;
import java.io.FileInputStream;
import java.util.Arrays;

public class FileInputStreamDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("SE_Advanced/1.txt");
        //创建字输入流对象
        FileInputStream fis = new FileInputStream(file);
        int ch;
        // read() 读取数据【读取不到时 返回 -1 】
        while ((ch = fis.read()) != -1){
            System.out.println(ch);
        }
    }
}

2.文件字节输入流(FileInputStream):每次读取多个字节

方法名称说明
public int read(byte[] buffer)每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1.
  • 注意:使用FileInputStream每次读取多个字节,读取性能得到了提升,但读取汉字输出还是会乱码
import java.io.File;
import java.io.FileInputStream;
import java.util.Arrays;

public class FileInputStreamDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("SE_Advanced/1.txt");
        //创建字输入流对象
        FileInputStream fis = new FileInputStream(file);
       	//字节数据读取
        byte[] arr = new byte[3];
        int len;
        while ((len = fis.read()) != -1){
            System.out.println(Arrays.toString(arr));
        }
    }
}

3.文件字节输入流(FileInputStream):一次读取完全部字节

方式一:定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节
方法名称说明
public int read(byte[] buffer)每次用一个字节数组去读取,返回字节数组读取了多少个字节,
如果发现没有数据可读会返回-1.
方式二:va官方为lnputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回
方法名称说明
public byte[] readAllBvtes() throws IOException直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返h回

注意:如果文件过大,创建的字节数组也会过大,可能引起内存溢出

4.文件字节输出流:写字节出去

FileOutputStream(文件字节输出流):

  • 作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去
构造器说明
public FileOutputStream(File file)创建字节输出流管道与源文件对象接通
public FileOutputStream(String filepath)创建字节输出流管道与源文件路径接通
public FileOutputStream(File file, boolean append)创建字节输出流管道与源文件对象接通,可追加数据
public FileOutputStream(String filepath, boolean append)创建字节输出流管道与源文件路径接通,可追加数据
方法名称说明
public void write(int a)写一个字节出去
public void write(byte[] buffer)写一个字节数组出去
public void write(byte[] buffer , int pos ,int len)写一个字节数组的一部分出去
public void close() throws IOException关闭流
import java.io.FileOutputStream;

public class FileOutputStreamDemo{
    public static void main(String[] args) throws Exception {
        //1.创建字节输出流 【append:表示追加> true表示可追加】
        FileOutputStream fos = new FileOutputStream("SE_Advanced/2.txt",true);
        //2.写数据
        fos.write(97);
        //写一个字节数组出去
        byte[] arr = {98,99,100};
        fos.write(arr);
        //写字节数组从 0 开始 到 1 的元素出去
        fos.write(arr,0,1);
        //写一个换行
        fos.write("\n".getBytes());
        //关闭输出流
        fos.close();
    }
}

5.案例-文件复制

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class FileCopyDemo {
    public static void main(String[] args) throws Exception {
        //定义 输入、输出流
        FileInputStream fis = new FileInputStream("E:\\WallPaperLap\\main2.jpg");
        FileOutputStream fos = new FileOutputStream("SE_Advanced\\main.jpg");
        //读写数据
        byte[] arr = new byte[1024];
        int len;
        while ((len = fis.read(arr)) != -1){
            fos.write(arr,0,len);
        }
        //关闭 输入、输出流
        fis.close();
        fos.close();
    }
}

六、释放资源的方式

1.try-catch-finally

try{
    ...
    ...
} catch (IOException e) {
    e.printStackTrance();
} finally {
    ...
    (最后一定执行的内容)
}
  • inally代码区的特点:无论try中的程序是正常执行了,还是出现了异常,最后都一定会执行finally区,除非JVM终
    止.
  • 作用:一般用于在程序执行完成后进行资源的释放操作(专业级做法)

2.try-with-resource

try(定义资源1; 定义资源2;...) {
    可能出现异常的代码;
} catch (异常类名  变量名) {
    异常处理的代码
}

该资源使用完毕后,会自动调用其close(方法,完成对资源的释放!

  • () 中只能放置资源,否则报错
  • 资源一般指的是最终实现了AutoCloseable接口。

3.案例

  1. Student实体类
public class Student {
    private String name;
    private int chinese;
    private int math;
    private int english;
    // get,set,toString方法均省略
}
  1. 文件流操作类
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

public class StuFileInOutDemo {
    public static void main(String[] args){
        FileOutputStream fos = null;
        try {
            Student s1 = new Student("林青霞", 98, 99, 100);
            Student s2 = new Student("朱茵", 100, 100, 100);

            ArrayList<Student> students = new ArrayList<>();
            students.add(s1);
            students.add(s2);
            students.sort(((o1, o2) -> o2.totalScore()- o1.totalScore()==0?1:o2.totalScore()- o1.totalScore()));

            fos = new FileOutputStream("SE_Advanced/student.txt");
            for (Student stu : students) {
                byte[] bytes = (stu.getName()+":"+stu.getChinese()+" "+stu.getMath()+" "+stu.getEnglish()+"\n").getBytes();
                System.out.println(Arrays.toString(bytes));
                fos.write(bytes);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }finally {
            //不管 try 中的代码是否出现异常,finally中的代码都会执行
            try {
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

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

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

相关文章

【JAVA】数据类型与变量(主要学习与c语言不同之处)

✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;橘橙黄又青-CSDN博客 目标&#xff1a; 1. 字面常量 2. 数据类型 3. 变量 1.字面常量 在上节课 Hello…

paramiko,一个强大的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 大家好&#xff0c;今天为大家分享一个强大的 Python 库 - paramiko。 Github地址&#xff1a;https://github.com/paramiko/paramiko 在网络编程中&#xff0c;远程操作是一项非常常见的需求&#xff0c;特别是…

QT 界面2.1

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {this->setWindowIcon(QIcon(":/Logo/1bc87d9b4c1ea878d5e0845257a06f7f (1).jpg")); // 图标this->setWindowTitle(&…

环境变量与进程详解

文章目录 1.进程的优先级1.1 查看优先级1.2 调制优先级 2.环境变量2.1 命令行参数2.2 环境变量 3.程序的地址空间3.1 为什么要有地址空间&#xff1f;3.2 linux的大O(1)调度算法 4.进程创建5.进程中止5.1 进程的退出码&#xff08;错误码&#xff09;5.2 进程终止的最优写法&am…

苍穹外卖Day07——总结7

前期文章 文章标题地址苍穹外卖Day01——总结1https://lushimeng.blog.csdn.net/article/details/135466359苍穹外卖Day02——总结2https://lushimeng.blog.csdn.net/article/details/135484126苍穹外卖Day03——总结3https://blog.csdn.net/qq_43751200/article/details/1363…

Data.olllo解密:秒数转换为日期格式的神奇技能!

引言&#xff1a; 时间是数据世界中不可或缺的一环&#xff0c;而将秒数转换为易读的日期格式往往是数据处理中的一大挑战。但是&#xff0c;有了Data.olllo&#xff0c;这一任务将变得异常简单&#xff01; 功能介绍&#xff1a; Data.olllo的秒数转换功能可以让您轻松地将秒…

花钱买不到系列-linux信号[2]卷

上一篇信号&#xff0c;我们知道了&#xff0c;进程需要保存信号&#xff0c;信号究竟是什么&#xff1f;什么又叫做发送信号呢&#xff1f;什么又叫做进程保存信号呢&#xff1f;那么&#xff0c;实际上呢&#xff1f;给大家一个基本的思考切入点&#xff0c;就是我们常见的信…

摩根大通:金和铜短期都涨多了 “一年十倍股”超微:预计在AI服务器占10-15%份额,给24倍PE很合理

今年以来大宗商品持续回暖&#xff0c;黄金、铜等金属表现尤为亮眼&#xff0c;乐观情绪蔓延之际摩根大通站出来提醒&#xff0c;小心回调风险&#xff01; 摩根大通在最新商品金属周报指出&#xff0c;黄金和铜价的急剧上涨反映了市场对中长期趋势的乐观预期&#xff0c;然而…

出差补助怎么发放更高效省心?这套攻略快看看

交补、餐补、话补等各类补助场景分散&#xff0c;无法实现一站式统筹管理。不仅如此&#xff0c;补贴核算也总是需要员工提供各类凭证&#xff0c;经过财务反复核实才能发放……出差发放补助原本是为了传递企业关怀&#xff0c;鼓励员工积极出差&#xff0c;由于发放和管理不当…

刷题日记——济南大学机试

折戟厦大&#xff0c;考虑调剂济南大学&#xff0c;但是更想去的是杭师大&#xff0c;还是刷题&#xff0c;济南大学比厦门大学题目简单很多&#xff0c;因此一篇文章不多分析&#xff0c;直接给出代码&#xff0c;全部采用纯C语言编写并且AC&#xff0c;不用C的stl库。 争取今…

Python学习笔记(二)

一&#xff1a;异常&#xff1a; 1.1&#xff1a;异常处理&#xff1a; 1.2&#xff1a;异常捕获&#xff1a; 1.3&#xff1a;异常传递&#xff1a; 二&#xff1a;模块&#xff1a; 2.1&#xff1a;模块的定义&#xff1a; 2.2&#xff1a;模块的导入&#xff1a; 2.3&…

vue3+ts+elementplus写一个登录页面教程

文章目录 前言1. 安装 Vue CLI 和 TypeScript 支持2. 创建登录组件 文章重点内容 前言 前期准备步骤&#xff1a; 创建一个使用 Vue 3 和 TypeScript 的登录页面涉及到多个步骤。以下是一个基本的教程&#xff0c;帮助你从头开始构建这样一个页面&#xff1a; 1. 安装 Vue CL…

电路笔记 :灯光画 元器件焊接+连锡处理

https://oshwhub.com/qazwsx1987/dengguanghua_0#P3 基础工具 常用的电路焊接工具&#xff1a; 工具描述电烙铁我买了一个便携电烙铁&#xff0c;但是烙铁头温度太低&#xff0c;焊锡总是粘在烙铁头上&#xff08;因为电量不足&#xff09;, 打火机秒变电烙铁焊台用于支撑工…

突破创作瓶颈:Kompas.ai的创意激发法

在创作的世界里&#xff0c;灵感如同一股清泉&#xff0c;滋养着每一个创作者的心灵。然而&#xff0c;即便是最富创造力的头脑&#xff0c;也难免会遇到创作瓶颈——那些令人窒息的、灵感枯竭的时刻。这些瓶颈不仅阻碍了创作的进程&#xff0c;还可能严重影响内容的质量和创作…

程序员35岁会失业吗?【来自主流AI的回答】

程序员35岁会失业吗&#xff1f; 35岁被认为是程序员职业生涯的分水岭&#xff0c;许多程序员开始担忧自己的职业发展是否会受到年龄的限制。有人担心随着年龄的增长&#xff0c;技术更新换代的速度会使得资深程序员难以跟上&#xff1b;而另一些人则认为&#xff0c;丰富的经…

卷起来——高级数据分析师

要成为一名高级数据分析师&#xff0c;需要掌握一系列的技能&#xff0c;包括数据处理、统计分析、机器学习、数据可视化以及业务理解等&#xff0c;喜欢或者想往这方面发展的童鞋们&#xff0c;卷起来&#xff0c;点击以下链接中的链接&#xff0c;备注"分析"进群交…

MySQL事务(超详细!!!)

目录 一、MySQL事务的概念 二、事务的ACID特点 1、原子性&#xff08;Atomicity&#xff09; 2、持久性 3、隔离性&#xff08;Isolation&#xff09; 3.1 事务的并发问题 ①、脏读(读取未提交数据) ②读已提交、不可重复读(前后多次读取&#xff0c;数据内容不一致) …

深入探讨Maven打包:打造精致的Zip包

在部署Spring Boot生产项目时&#xff0c;首先需要使用Maven将其打包成一个JAR文件或者包含JAR文件的ZIP文件。随后&#xff0c;通过堡垒机将打包好的文件上传至服务器进行部署&#xff0c;或构建成Docker镜像进行发布。在这一过程中&#xff0c;我们需要将项目中的配置文件或静…

I.MX6ULL_Linux_驱动篇(56)linux PWM驱动

PWM 驱动简析 设备树 PWM 控制器节点 I.MX6ULL 有 8 路 PWM 输出&#xff0c;因此对应 8 个 PWM 控制器&#xff0c;所有在设备树下就有 8 个PWM 控制器节点。这 8 路 PWM 都属于 I.MX6ULL 的 AIPS-1 域&#xff0c;但是在设备树 imx6ull.dtsi 中分为了两部分&#xff0c; PW…

科技引领趋势:3D元宇宙展厅在各行业中的应用及其未来展望

随着技术的不断进步&#xff0c;3D元宇宙展厅正逐渐成为各行各业展示产品的新选择。相较于传统的线下展厅&#xff0c;3D元宇宙展厅以其独特的优势&#xff0c;为产品展示和品牌推广提供了全新的可能性。 一、虚拟与现实的完美融合 3D元宇宙展厅是指在虚拟世界中构建的三维展览…