目录
1、IO流概述
IO流:其中:I表示input,是数据从硬盘进内存的过程,称之为读。
O表示output,是数据从内存到硬盘的过程,称之为写。
IO的数据传输,可以看做是一种数据的流动,按照流动的方向,以内存作为参照物,进行读写操作。
简单来说:内存在读,内存在写
2、字节流写数据
步骤:1、创建字节流对象
注意事项:如果文件不存在,就创建。如果文件存在就清空。
2、写数据
注意事项:写出的整数,实际写出的是整数在码表上对应的字母
3、释放资源
注意事项:每次使用流必须释放资源
2.1、字节流写数据的三种方式
方法名 | 说明 |
void write(int b) | 一次写一个字节数据 |
void write(byte[] b) | 一次写一个字节数组数据 |
void write(byte[] b, int off, int len) | 一次写一个字节数组的部分数据 |
写完数据后,加换行符:
windows: \r\n
linux: \n
mac:\r
字节流写数据追加写入
piblic FileOutStream(String name, boolean append),创建文件输出流以指定的名称写入文件。如果第二个参数为true,不会清空文件里面的内容。
2.2、字节流缓冲流
字节缓冲流
- BufferOutputStream:字节缓冲输出流
- BufferInputStream:字节缓冲输入流
构造方法:
- 字节缓冲输出流:BufferOutputStream(OutputStream out)
- 字节缓冲输入流:BufferInputStream(Input Stream in)
字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作
2.3、字节流和字节缓冲流小结
字节流:
可以操作(拷贝)所有类型的文件
字节缓冲流:
可以提高效率
不能直接操作文件,需要传递字节流
拷贝文件的四种方式:
- 字节流一次读写一个字节
- 字节流一次读写一个字节数组
- 字节缓冲流一次操作一个字节
- 字节缓冲流一次操作一个字节数组
思考:既然字节流可以操作所有文件,那么为什么还要学习字符流?
- 如果利用字节流,把文本文件中的中文,读取到内存中,有可能出现乱码
- 如果利用字节流,把中文写到文本文件中,也有可能出现乱码
3、编码表
Unicode码表:
由国际组织ISO制定,是统一的万国码,计算机科学领域里的一项业界标准,容纳世界上大多国家的所有常见文字和符号
但是因为表示的字符太多,所以Unicode码表中的数字不是直接以二进制的形式存储到计算机的。会先通过UTF-7,UTF-7.5,UTF-8,UTF-16,以及UTF-32进行编码,再存储到计算机,其中最为常见的就是UTF-8;
注意:Unicode是万国码,以UTF-8编码后一个中文以三个字节的形式存储
3.1 、字节流和字符流使用小结
- 想要进行拷贝,一律使用字节流或者字节缓冲流
- 想要把文本文件中的数据读到内存中,请使用字符输入流
- 想要把内存中的数据写到文本文件中,请使用字符输出流
- GBK码表一个中文两个字节,UTF-8编码格式一个中文三个字节
4、字符流
字符流写数据的五种方式
方法名 | 说明 |
void write(int c) | 写一个字符 |
void write(char[] cbuf) | 写出一个字符数组 |
void write(char[] cbuf, int off, int len) | 写出字符数组的一部分 |
void write(String str) | 写一个字符串 |
void write(String str, int off, int len) | 写一个字符串的一部分 |
4.1 、字符流写数据
步骤:1、创建字符流对象
注意事项:如果文件不存在,就创建。但是要保证父级路径存在。
如果文件存在就清空
2、写数据
注意事项:写出的int类型整数,实际写出的是整数在码表上对应的字母
写出字符串数据,是把字符串本身原样写出
3、释放资源
注意事项:每次使用流必须释放资源
4.2、 flush和close方法
方法名 | 说明 |
flush() | 刷新流,还可以继续写数据 |
close() | 关闭流,释放资源,但是再关闭之前会先刷新流,一旦关闭,就不能写数据 |
4.3、字符缓冲流
字符缓冲流:
- BufferedWriter:可以将数据高效的写出
- BufferedReader:可以将数据高效的读取到内存
构造方法:
- BufferedWriter(Writer out)
- BufferedReader(Reader in)
4.4 、字符缓冲流特有功能
BufferWriter:
- void newLine():写一行行分隔符,行分割符字符串由系统属性定义
BufferedReader:
- public String readline():读一行文字。结果包含行的内容的字符串,不包括任何行终止字符,如果流的结尾已经到达,则为NULL;