平时我们所谈到的“文件”都是指硬盘上的文件
硬盘(外存)和内存相比:
之前的代码,绝大部分都是围绕内存展开的,JavaSE数据结构中定义个变量,其实就是在内存上申请空间,Mysql主要就是操作硬盘!!
文件IO在这里也是操作硬盘!
路径:咱们电脑文件系统上一个文件/目录的具体位置
目录:计算机专业术语
文件夹:通俗说法(大白话)
文件路径是从此电脑出发一直往下走,直达目标文件,此时这中间经过的内容!
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());
}
}
该段代码的运行结果为:
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(输出)
需要我们认清楚输入/输出的方向!!
从硬盘读数据到内存叫做输入:Reader(输入),InputStream(输入)
从内存数据写到硬盘叫做输出:Writer(输出),OutputStream(输出)