• 文件操作和IO


    平时我们所谈到的“文件”都是指硬盘上的文件

    硬盘(外存)和内存相比:

    • 速度:内存比硬盘块很多
    • 空间:内存空间比硬盘小
    • 成本:内存比硬盘贵(都挺便宜的了)
    • 持久化:内存掉电后数据丢失,外存掉电后数据还在

    之前的代码,绝大部分都是围绕内存展开的,JavaSE数据结构中定义个变量,其实就是在内存上申请空间,Mysql主要就是操作硬盘!!

    文件IO在这里也是操作硬盘!

    1. 文件操作:创建文件,删除文件,重命名文件,创建目录
    2. 文件内容操作:针对文件内容进行读和写

    路径:咱们电脑文件系统上一个文件/目录的具体位置

    目录:计算机专业术语

    文件夹:通俗说法(大白话)

    文件路径是从此电脑出发一直往下走,直达目标文件,此时这中间经过的内容!

    Windows都是从”此电脑“起头的,表示路径的时候,也可可以把此电脑省略,直接从盘符开始(C盘,D盘)

    D:\project\山东大学\教育服务团队\数学专业课件\高等代数\2023课件\矩阵初阶……

    实际表示路径是通过字符串表示,每个目录之间通过 \或者/ 来分割(只在Windows下使用,代码中需要写成“\\"《——转义字符

    绝对路径:从盘符开始,一层一层往下找,这个过程得到的路径

    相对路径:从给定的某个目录出发,一层一层往下找,这个过程得到的路径(一定要明确基准目录(工作目录)是啥!)

    关于路径,非常关键,后面很多地方都会涉及到,尤其是相对路径!!

    相对路径一定要明确工作目录(基准目录)是啥??

    文件系统上,任何一个文件对应的路径是唯一的!!不会存在两个路径相同,文件却不同的情况!!

    在Linux,可能存在一个文件,有两个不同的路径能找到(Windows系统不存在)

    Windows上可以认为:路径和文件是一对一的!!路径就相当于一个文件的”身份标识“!!

    文本文件 VS 二进制文件

    文本文件,存储的是文本,文本文件的内容都是由ASCII字符构成的!!

    文本文件里存储的数据,就是遵守ASCII或者其他字符集的编码,所得到的文件,本质上存的是字符(不仅仅是char)

    二进制文件存储的是二进制数据!没有任何限制,存啥都可以!!

    最简单粗暴的方式来判定:文本文件跟二进制文件的区别??

    直接使用记事本打开某个文件!!(记事本是按照文本的方式来解析的)

    如果你看到的内容能看懂《——》文本文件

    如果你看到的内容看不懂(乱糟糟的)《——》二进制文件

    二进制都是一个一个的字符,记事本尝试把前前若干个字节的数据往utf8码里面套,套出来啥就是啥,套不出来就是方块!

    文本文件:txt文件,.java文件,.c文件

    二进制文件:.class文件,.exe文件,.jpg文件,.mp3文件

    word编辑的是文本??还是二进制??(二进制)

    excel编辑的表格是文本??还是二进制??(二进制)

    文件操作系统:

    Java标准库给我们提供了File这个类

    File对象是硬盘上的一个文件的”抽象“表示

    文件是存储在硬盘上的,直接通过代码操作硬盘,不太方便,则在内存中创建一个对应的对象,操作这个内存中的对象,就可以间接的影响到硬盘的文件情况了!!

    1.构造File对象

    构造的过程中,可以使用绝对路径/相对路径,进行初始化,这个路径指向的文件,可以是真实存在的,也可以是不存在的!

    1. import java.io.File;
    2. import java.io.IOException;
    3. public class Main1 {
    4. public static void main(String[] args) throws IOException {
    5. //就可以通过File对象进行操作了!
    6. //new 一个File对象
    7. File file=new File("./cat.jpg");
    8. //./cat.jpg相对路径写法
    9. //file提供的一些方法
    10. System.out.println(file.getParent());
    11. System.out.println(file.getName());
    12. System.out.println(file.getPath());
    13. //返回File文件的绝对路径
    14. System.out.println(file.getAbsolutePath());
    15. System.out.println(file.getCanonicalPath());//抛异常
    16. }
    17. }

    2.File提供的一些方法

    一看名字就知道咋用了!!官方文档可搜~

    1. import java.io.File;
    2. import java.io.IOException;
    3. public class Main2 {
    4. public static void main(String[] args) throws IOException {
    5. //在相对路径中./通常可以省略
    6. // 路径写啥都行,只要程序能访问到对应的目录就可以!如:./hello_word.txt
    7. File file=new File("./hello_word.txt");
    8. //判定该文件是否存在
    9. System.out.println(file.exists());
    10. //是否为目录
    11. System.out.println(file.isDirectory());
    12. //是否为文件
    13. System.out.println(file.isFile());
    14. //创建文件
    15. file.createNewFile();//抛异常
    16. System.out.println("=====================");
    17. //判定该文件是否存在
    18. System.out.println(file.exists());
    19. //是否为目录
    20. System.out.println(file.isDirectory());
    21. //是否为文件
    22. System.out.println(file.isFile());
    23. }
    24. }

    该段代码的运行结果为:

    IDEA工作目录就是项目所在的目录

    写相对路径就是从system_code这一级为基准来展开的!!

    目录的创建:

    1. import java.io.File;
    2. public class Main3 {
    3. public static void main(String[] args) {
    4. //多级目录
    5. File file=new File("test_dir/aaa/bbb");
    6. //只能创建一级目录
    7. // file.mkdir();
    8. //创建多级目录
    9. file.mkdirs();
    10. }
    11. }

    目录的删除,用delete()方法即可

    创建好目录之后,可以通过List()来罗列出目录里面的内容

    1. public static void main(String[] args) {
    2. //目录的删除
    3. File file=new File("test_dir");
    4. String[] result=file.list();
    5. System.out.println(Arrays.toString(result));
    6. File[] result1=file.listFiles();
    7. System.out.println(Arrays.toString(result1));
    8. }

    重命名操作:

    1. public static void main(String[] args) {
    2. //重命名操作
    3. File src=new File("./test_dir");
    4. File dest=new File("./test222");
    5. //重命名
    6. src.renameTo(dest);
    7. }

    文件内容操作:

    这个就不是一个类就能完成的了,涉及到很多类,一组类!!

    针对文本文件提供了一组类,统称为”字符流“,读写的基本单位是字符

    典型代表:Reader(输入),Writer(输出)

    针对二进制文件提供了一组类,统称为”字节流“,读写的基本单位是字节

    典型代表:InputStream(输入),OutputStream(输出)

    每种流对象又分为两种:

    输入流:Reader(输入),InputStream(输入)

    输出流:Writer(输出),OutputStream(输出)

    需要我们认清楚输入/输出的方向!!

    从硬盘读数据到内存叫做输入:Reader(输入),InputStream(输入)

    从内存数据写到硬盘叫做输出:Writer(输出),OutputStream(输出)

  • 相关阅读:
    两个移相算法
    obj解析为集合
    MongoDB聚合运算符:$cosh
    重构: 改善既有代码的设计
    docker生成ssl证书(按步骤来即可,真实可用)
    【LeetCode每日一题】——445.两数相加 II
    富文本处理(QTextEdit)
    chatglm3-6b部署及微调
    【翻译】Seastar 教程(二)
    worthington组织解离方法和材料:基本原代细胞分离
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/133047237