流
上篇中的File能进行一些常规的文件操作,但是没有读写两个核心操作
流(Stream)
就是Java中针对文件操作,又进行了进一步的抽象
流是一组类/一组API,描述了如何来进行文件读写操作
不同的类的读写方式都会存在差异
图中黄色部分为常用类.
所有的IO流相关的类,一共分成两个大的部分
- 字节流 读写数据以字节位基本单位 (byte)
- 字符流 读写数据以字符位基本单位 (char)
当我们处理文本文件的时候,使用字符流
当我们处理二进制文件的时候,使用字节流
区分二进制文件和文本文件的简单方式:
用记事本打开文件,如果能看懂,那就是文本文件
如果看不懂,那就是二进制文件
字节流
- InputStream:
输入,从输入设备读取数据到内存中. - OutputStream:
输出.把内存中的数据写入到输出设备中
如果发现某个类的名字中带有inputStream/OutputStream 说明这就是字节流
但是也有个例外,PrintStream不带上面的内容,但他也是字节流
字符流
- Reader:输入
- Writer:输出
如果发现某个类的名字中带有Reader或这Writer,说明这个类就是字符流~
但是也有特例:
- InputStreamReader
- OutputStreamWriter
这两个是字符流,主要是看一个单词的后面一部分,最后一部分是主体,前面的部分都是修饰的
以字节流为例,使用流对象读写文件
需要知道的两个知识点:
FileInputStream(文件输入流)
- FileInputStream(File file) : 向file对象的文件读取数据
- FileInputStream(String path) : 向path文件读取数据
读取数据: 一个一个字节读取
public static void main(String[] args) throws IOException {
FileInputStream fileInputStream = new FileInputStream("e:/BaiduNetdiskDownload/test.txt");
int len = -1;
//每次只读一个字节,如果没读完就返回下一个数据字节,如果读完了就返回-1,读完了就退出循环
while((len = fileInputStream.read()) != -1) {
System.out.print((char)len);
}
fileInputStream.close();
}
输出:
test
读取数据: 先把字节存入到缓存区数组中,一次读一个指定长度的字节数组
public