文件的本质
- 字节(Byte)流
程序可以像水流一样有顺序地一个个字节读写文件,这个过程就叫Input/Output
InputStream/OutputStream
抽象的输入/输出操作,无论是:
- 从网络读取字节流
- 文件写入字节流
- 从其他地方读取字节流
- FileInputStream/FileOutputStream
- 如果不是特别熟悉Java文件系统,请使用绝对路径
Java的文件类File
- File并不代表一个“文件”,它代表一个“路径”
- 抽象的“文件”路径:文件or文件夹
- File的常见方法
- exists
- isDirectory/isFile
- list/listFiles
- getName
- getParentFile
- getCanonicalPath/getCanonicalFile
- …
- 绝对路径与相对路径
- 读/写文件
- NIO(Java 7+)
- New IO
- Non-blocking IO
- NIO的Path —— 就是旧版的File
Java的NIO
- Path
- 可以和File互转
- 经典的IO模型是基于流的
- 非常直观,容易理解,方便抽象
- 但是非常慢,按顺序一个个字节
- NIO模型是基于块的(Buffer)
- 块和块之间没有顺序,可以同时写,比基于流的更快
FIles(File相关工具方法的集合)
- Collection对应的工具方法合集为:Collections
- Java中工具合集的命名习惯
CPU与磁盘的矛盾
- 对于CPU的计算速度来说,磁盘的IO太慢了
- CPU等待IO浪费了很多时间
- 解决方法:
- 缓冲
- 并发(多线程):在等待IO的时候CPU做些其他事
- BufferReader/Writer
- BufferReader — 一次性读取很多东西到缓冲区
- BufferWriter — 一次性写很多东西到缓冲区
第三方IO轮子
- Apache Commons IO