一、JAVA的I/O流
I/O即Input和Output,I/O流实现设备之间的数据传输。
二、I/O流的分类
按照数据的流向可以分为输入流和输出流。
输入流是指java程序从其他设备读取数据,输入流的方法大都是读(read)的方法;输出流是指java程序向其他设备写入数据,输出流的方法大都是写(write)的方法。
按照操作的文件类型,可以分为字节流和字符流。
字节流每次操作文件中的一个字节,可以读写任意类型的文件;字符流每次操作文件中的一个字符,只能读写文本文件。
常用的I/O流的java类可以用下图表示:
A、字节输入流(InputStream)是所有字节输入流的抽象基类,常用的直接或间接继承该类的子类有FileInputStream和BufferedInputStream,后者为高效输入流。
InputStream常用的方法有以下几个:
①read(),返回值为int型。该方法从输入流中读取下一个字节,返回下一个数据字节;当读取到输入流末尾时返回-1(即返回-1表示读取结束) 。
②read(byte[] b),返回值为int类型。该方法从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中,返回值为数组的有效长度。
③close(),返回值void。该方法关闭此输入流,释放资源。
B、字节输出流(OutputStream)是所有字节输出流的抽象基类,常用的直接或间接继承该类的子类有FileOutputStream和BufferedOutputStream,后者为高效输入流。
OutputStream常用的方法有以下几个:
①write(int b),返回值为void。该方法将指定的字节写入此输出流 。
②write(byte[] b),返回值为void。该方法将 b.length 个字节从指定的 byte 数组写入此输出流。
③write(byte[] b,int off,int len),返回值void。该方法将 byte数组中从off索引开始的len个字节写入此输出流。
④close(),返回值void。该方法关闭此输出流,释放资源。
C、字符输入流(Reader)是所有字符输入流的抽象基类,常用的直接或间接继承该类的子类有FileReader(继承InputStreamReader,InputStreamReader继承Reader)和BufferedReader,后者为高效输入流。
Reader常用的方法有以下几个:
①read(),返回值为int类型。该方法读取单个字符,如果返回值为-1,表示读取结束。
②close(),返回值为void。该方法关闭此输入流,释放资源。
③BufferedReader特有的方法----readLine(),返回值String类型。该方法读取一个文本行,返回值为该行的内容,读取到换行符认为该行终止(不会存取换行符),如果返回值为null,表示读取结束。
D、字符输出流(Writer)是所有字符输出流的抽象基类,常用的直接或间接继承该类的子类有FileWriter(继承OutputStreamWriter,OutputStreamWriter继承Writer)和 BufferedWriter,后者为高效输出流。
Writer常用的方法有以下几个:
① write(int b),返回值为void。该方法写入单个指定的字符b。
②write(char[ ] c),返回值为void。该方法写入单个指定的字符数组。
③write(char[ ] c),返回值为void。该方法写入单个指定的字符数组。
④write(char[ ] c,int off, int len),返回值为void。该方法将 char数组中从off索引开始的len个字节写入此输出流。
⑤write(String s),返回值为void。该方法可以写入字符串。
⑥flush(),返回值为void。该方法刷新该流的缓冲区。建议使用Writer写一次刷新一次。
⑦close(),返回值void。该方法关闭此输出流,释放资源。
⑧BufferedWriter特有的方法----newLine(),写入一个行分隔符,返回值为void。行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行 ('\n') 符。