文件操作和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对象

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

import java.io.File;
import java.io.IOException;

public class Main1 {
    public static void main(String[] args) throws IOException {
        //就可以通过File对象进行操作了!
        //new 一个File对象
        File file=new File("./cat.jpg");
        //./cat.jpg相对路径写法

        //file提供的一些方法
        System.out.println(file.getParent());
        System.out.println(file.getName());
        System.out.println(file.getPath());
        //返回File文件的绝对路径
        System.out.println(file.getAbsolutePath());
        System.out.println(file.getCanonicalPath());//抛异常

    }
}

2.File提供的一些方法

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

import java.io.File;
import java.io.IOException;

public class Main2 {
    public static void main(String[] args) throws IOException {
        //在相对路径中./通常可以省略
        // 路径写啥都行,只要程序能访问到对应的目录就可以!如:./hello_word.txt
        File file=new File("./hello_word.txt");
        //判定该文件是否存在
        System.out.println(file.exists());
        //是否为目录
        System.out.println(file.isDirectory());
        //是否为文件
        System.out.println(file.isFile());

        //创建文件
        file.createNewFile();//抛异常
        System.out.println("=====================");

        //判定该文件是否存在
        System.out.println(file.exists());
        //是否为目录
        System.out.println(file.isDirectory());
        //是否为文件
        System.out.println(file.isFile());
    }
}

该段代码的运行结果为:

文件操作和IO_第1张图片

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

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

目录的创建:

import java.io.File;

public class Main3 {
    public static void main(String[] args) {
        //多级目录
        File file=new File("test_dir/aaa/bbb");
        //只能创建一级目录
       // file.mkdir();
        //创建多级目录
        file.mkdirs();
    }
}

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

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

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

重命名操作:

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

文件内容操作:

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

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

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

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

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

每种流对象又分为两种:

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

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

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

文件操作和IO_第2张图片

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

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

你可能感兴趣的:(java要笑着学,操作系统哪些事?,java,网络,开发语言)