IO(原理)
- 体系结构
- 硬盘存储 – 文件操作
- 在Java中,实现基本的IO操作
maven(软件工具)
硬件:处理器(CPU)、存储器(内存)、I/O(输入设备(Input Device)、输出设备(Output Device))
CPU只能和内存做直接的的数据交换
Input Device:现实中的物理信号(光、电、波信号)-》数字个数,存储在内存中
Output Device:数字-》物理信号
I/O设备:显示器(O)、触屏显示器(IO)、鼠标(I)、键盘(I)、摄像头(I)、麦克风(I)、扬声器(O)
硬盘——存储
路径
- 绝对路径(absolute path)缩写为(abs path):从一棵树的根节点除法描述的路径
- 相对路径(relative path):从“我们”所在的为止出发,描述的路径。
对于绝对路径,我们无论身在何处,总是唯一确定一个位置。
对于相对路径,我们所处的位置一遍,路径可能就失效了。
“我们”所在的位置一定是一个目录,我们是不能处于一个文件上的。
”我们“所在的位置:每个进程都有一个当前工作目录(current working directory cwd),一般一个进程的启动目录,就是当前目录。
描述路径
D: \ Users \ dhl \ Desktop\ JavaEE
- 从根D: 开始
- 找到(D:)的孩子Users
- 找到(Users)的孩子dhl
- 找到(dhl)的孩子Desktop
- 找到(Desktop)的孩子JavaEE
C:、D:、E:代表的就是根,所以这个以根为开头的路径一定是一个绝对路径。
\ 为路径分割符(path separator)
当我们身处D:\Users\dhl时,Desktop\JavaEE与上面是描述的同一个节点,但是此时不是由根开始,所以是相对路径。
File对象描述一个文件
String path = "D:\\Users\\dhl\\Desktop\\JavaEE";
因为在字符串中,反斜杠(\)表示转义的意思,比如\n,\t,所以使用\\表示。
Windows使用\作为路径分隔符,Linux使用/作为路径分隔符,但Java跨平台,所以怎么写都可以。
//1. 绝对路径的方式创建
//1.1 直接传入字符串路径
File file1 = new File("D:\\Users\\dhl\\Desktop\\JavaEE\\hello.txt");
//1.2 传入父路径 + 子路径
File file2 = new File("D:\\Users\\dhl\\Desktop\\JavaEE","hello.txt");
//1.3 以File传入parent
File file = new File("D:\\Users\\dhl\\Desktop\\JavaEE");
File file3 = new File(file,"hello.txt");
路径中的特殊符号
一个点(.)和两个点(.)。
其中,“.” 表示当前位置(目录)不动。
其中,"…"表示回到当前位置的父节点(目录)上。
这两个符号一般在相对路径上使用较多。
例如:我们现在在D:Users/dhl下
…/…/Users表示D:Users
./Desktop/JavaEE表示D:Users/dhl/Desktop/JavaEE
但是如果此时在根目录,使用"…"还是在根目录,
文件的路径小结
- 路径是树上找到一个节点的位置
- 路径并不表示文件一定存在
- 路径分为绝对路径和相对路径
- 当前位置:进程的当前工作目录
- 文件路径"/“或者”\\"表示路径分隔符,Java下使用哪个都可以
- “.” 表示当前位置(目录)不动,"…"表示回到当前位置的父节点(目录)上。
Java代码操作文件
创建一个新文件
返回true:创建成功
返回false:创建失败(文件已存在)
抛出IOException:发生了IO异常,(最常见的是文件的目录还不在)
删除一个文件
true:删除成功
false:对应文件不存在、非空目录删除
IOException:其他情况失败(文件正被其他进程打开)
delete:立即删除
deleteOnExit:在JVM退出时才真正删除
删除非空目录
- 先遍历(深度优先——递归),删除这个目录下的所有子孙,让这个目录变为空目录。
- 删除该目录
public class Demo2 {
public static void main(String[] args) throws IOException{
File file = new File("D:\\Users\\dhl\\Desktop\\JavaEE");
traversal(file);
}
private static void traversal(File dir) throws IOException {
File[] files = dir.listFiles();//查看这个目录下的所有孩子(不是子孙)
for (File file : files) {
if (file.isDirectory()) { //如果这个孩子也是目录,继续深度有限进行遍历
System.out.println(file.getCanonicalPath() + "\\");
traversal(file);
} else {
System.out.println(file.getCanonicalPath());//得到这个文件的一个标准(去除无意义的..和.)
}
file.delete();
}
}
}
小结
IO设备(数据必须经由IO设备处理并加载到内存之后才能被CPU处理)
硬盘设备(存储常识:读写速度、易失性)
文件系统(文件是硬盘数据的抽象)
树形结构、路径、目录、普通文件
文件数据 = 管理数据 + 内容数据
管理数据是java.io.File对象
createNewFile() + delete()
设备(数据必须经由IO设备处理并加载到内存之后才能被CPU处理)
硬盘设备(存储常识:读写速度、易失性)
文件系统(文件是硬盘数据的抽象)
树形结构、路径、目录、普通文件
文件数据 = 管理数据 + 内容数据
管理数据是java.io.File对象
createNewFile() + delete()