IO分为输入流:通过程序读取磁盘中的文件。输出流:通过程序将数据写入磁盘中。
还可以通过操作内容来划分,分为字节流和字符流。
字节流又分为字节输入流和字节输出流,字节流又被称为万能流可以操作任何文件。
字符流又分为字符输入流和字符输出流,字符流只能操作文本文件。
1.字节输入流
InputStream是一个抽象类,又四个常用的实现类。
public abstract class InputStream implements Closeable
InputStream实现了Closeable接口,说明它是一个物理资源,需要关闭,放在try 。。。with。。。resources里面。
1.1常用方法
int available();返回输入流里的有效字节数。
int read()无参;一次读一个字节,返回值:1.读取到的数据(ASCII码值) 2. -1 此时表示输入流中的数据读完。
int read(byte[ ] bytes)一次读bytes.length()个字节,返回值: 1.读取到的有效字节个数
2. 读到末尾时返回 -1。
int read(byte[ ] bytes,int off,int len),一次读取bytes.length();个字节,把读取到的长度为len的数据从索引为off处放入数组中,返回值 :1.读取到的有效字节个数,2. -1 读到末尾。
read的有参方法,读取到的数据保存在数组bytes中。
想把bytes中的内容输出用Arrays.toString();想把bytes内容转字符串,用String构造方法。
流类似与迭代器,当你读取流里面的数据后,里面的有效字节就减少多少。
文件里有五个字节数据,数据保存在流里后,先读取一个字节,输出是k,当此时输出流中有效字节个数时,是4而不是5.
1.2常用子类
1.FileInputStream磁盘文件字节输入流
读取文件数据,文件必须存在。
1.1 构造方法:FileInputStream(File file);
FileInputStream(String name);文件路径
2.字节输出流
输出流的字类自带缓冲区,需要手动将缓冲区的数据刷到文件中去。
2.1常用方法
void write(int b);//参数b是ASCII码
void write(byte[] bytes);
void write(byte[] bytes,int off,int len);
2.2常用子类
FileOutputStream(File file);
FileOutputStream(File file,boolean append);//append默认值是false,表示每写一次覆盖,true表示拼接。
参数也可以是文件路径字符串。
3.高效字节流
底层自带缓冲区。 byte[ 8192].具备了普通字符流不具备的功能。
读一个,读到缓冲区中等到缓冲区满了以后再全部写到文件中。