1、I/O的概念
java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许java程序使用相同的方式来访问不同的输入/输出源。
2、I/O的分类
按照流的流向分,可以分为输入流和输出流。
按照操作单元划分,可以划分为字节流和字符流。
按照流的角色划分为节点流和处理流。
3、基本的字节(字符)输入流
InputStream和Reader是所有输入流的抽象基类,本身并不能创建实例来执行输入,但它们将成为所有输入流的模板,所以它们的方法是所有输入流都可使用的方法。
在InputStream(字节输入流)里面包含如下3个方法。
int read(); 从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转换为int类型)。
int read(byte[] b)从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数。
int read(byte[] b,int off,int len); 从输入流中最多读取len个字节的数据,并将其存储在数组b中,放入数组b中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字节数。
在Reader(字符输入流)中包含如下3个方法。
int read(); 从输入流中读取单个字符,返回所读取的字符数据(字节数据可直接转换为int类型)。
int read(char[] b)从输入流中最多读取b.length个字符的数据,并将其存储在字节数组b中,返回实际读取的字符数。
int read(char[] b,int off,int len); 从输入流中最多读取len个字符的数据,并将其存储在数组b中,放入数组b中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字符数。
4、字节输出流的方法
OutputStream和Writer的用法也非常相似。两个流都提供了如下三个方法:
void write(int c); 将指定的字节/字符输出到输出流中,其中c即可以代表字节,也可以代表字符。
void write(byte[]/char[] buf); 将字节数组/字符数组中的数据输出到指定输出流中。
void write(byte[]/char[] buf, int off,int len ); 将字节数组/字符数组中从off位置开始,长度为len的字节/字符输出到输出流中。
5、因为字符流直接以字符作为操作单位
所以Writer可以用字符串来代替字符数组,即以String对象作为参数。Writer里面还包含如下两个方法。
void write(String str); 将str字符串里包含的字符输出到指定输出流中。
void write (String str, int off, int len); 将str字符串里面从off位置开始,长度为len的字符输出到指定输出流中。
6、注意事项
(1)read()方法的实现需要判断下一个值是不是等于-1;-1就表示到大了文件的末尾。
(2)字节流不适用与中文
(3)输出流的时候会创建对象
②文件不存在,自动创建
③文件夹不存在,报错
(4)流是需要关闭的close方法。