目录
1. 什么是IO
IO 就是输入输出 (input 和 output).
输入输出是相对 cpu 来说的, 数据从硬盘到 cpu 就是输入, 而从 cpu 到硬盘就是输出了.
2. 存储和硬盘
计算机中, 用于数据直接处理的是内存,存储数据的是硬盘.
硬盘的定义: 用来存储数据的存储设备, 它以磁盘的形式存储数据.
计算机中存储数据的设备:
访问速度 | 空间 | 价格 | 数据 | |
cpu | 最快 | 最小 | 最贵 | 丢失 |
内存 | 其次 | 其次 | 其次 | 丢失 |
硬盘 | 最慢 | 最大 | 最便宜 | 不丢失 |
3. 文件系统
文件, 意思就是存储在硬盘上的文件.
操作系统有一个专门的模块, 文件系统. 此处文件系统是按照树形结构来组织文件的, 这里的树 不是"二叉树", 而是 N 叉树. 每一个普通文件(不是目录) 都是一个叶子节点, 一个目录文件里又有很多叶子节点.
文件路径
操作系统使用 "路径" 这样的概念来描述一个文件的位置.
文件路径呢 分为绝对路径和相对路径.
绝对路径: 指从根节点出发, 一层一层最终到达目标文件.
相对路径: 先指定一个 "当前目录" / "基准目录" , 从这个目录出发, 找到目标文件.
文件分类
1. 文本文件 (能看懂的文件)
2. 二进制文件 (打开是乱码的文件)
给你一个文件, 想知道它是二进制文件还是文本文件. 可以使用记事本打开它, 不是乱码就是文本文件.
Java对于文件系统操作的 API
1. 针对文件系统的操作
包括不限于 创建文件 / 删除文件 / 文件重命名...
Java 中通过 java.io.File 类来对⼀个⽂件(包括⽬录)进⾏抽象的描述。
File 概述
属性
路径之间的分隔符 , 是根据系统自动调整的. 实际开发还是建议使用 /
构造方法
构造 File 对象, 需要指定路径. 此处可以是 绝对路径 也可以是 相对路径 .
这个路径可以不存在.
方法示例
deleteOnExit()
退出时删除, 这样的文件也称为临时文件. 有些程序就带有 临时文件 的功能.
renameTo()
文件重命名.
它还能移动文件 . 将 text.txt 引动到 ./aa 目录下.
public static void main(String[] args) {
File file = new File("text2.txt");
File dest = new File("./aa/text2.txt");
file.renameTo(dest);
}
平时如果复制一个大的文件, 是比较费时间的.
如果是移动一个大的文件, 此时移动就是简单的重命名 O(1) . (前提是在同一个硬盘上)
2. 针对文件内容的操作
读文件 和 写文件.
文件内容的读写 --- 数据流
1. 字节流
以字节为单位进行读写, 一次最少读写一个字节.
代表类: InputStream (输入) OutputStream (输出).
2. 字符流
以字符为单位进行读写. 例如 如果是 utf8 表示汉字, 一个汉字三个字节, 每次读写都得以3个字节为单位, 不能一次读写半个汉字.
代表类: Reader (输入) Writer (输出)