1. IO流

    1)根据方向分为:

        输入流和输出流。方向的定了是基于我们的程序的。流向我们程序的流叫做:输入流;从程序向外流的叫做:输出流

    2)流根据源头分为: 

        基本流(节点流):从特定的地方读写的流类,如磁盘或一块内存区域。即有来源。 

        处理流(高级流、过滤流):没有数据来源,不能独立存在,它的存在是用于处理基本流的。是使用一个已经存在的输入流或输出流连接创建的。

    3)流根据处理的数据单位不同划分为:

        字节流:以一个“字节”为单位,以Stream结尾

        字符流:以一个“字符”为单位,以Reader/Writer结尾

 

2. 基本字节流FileInputStream和FileOutputStream

    用于读写文件的字节流FIS/FOS(基本流)

    1)FileInputStream:文件字节输入流

        FileInputStream 常用构造方法:

        ① FileInputStream(File file):通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的File对象file指定。即向file文件中写入数据。

        ② FileInputStream(String filePath):通过打开一个到实际文件的连接来创建一个FileInputStream,该文件通过文件系统中的文件路径名指定。也可直接写当前项目下文件名。

        常用方法:

        ① int read(int d):读取int值的低8位。

        ② int read(byte[] b):将b数组中所有字节读出,返回读取的字节个数。

        ③ int read(byte[] b,int offset,int length):将b数组中offset位置开始读出length个字节。

        ④ available()方法:返回当前字节输入流 可读取的总字节数。

    2)FileOutputStream:文件字节输出流

        FileOutputStream常用构造方法: 

        ① FileOutputStream(File File):创建一个向指定File对象表示的文件中写入数据的文件输出流。会重写以前的内容,向file文件中写入数据时,若该文件不存在,则会自动创建该文件。

        ② FileOubputStream(File file,boolean append):append为true则对当前文件末尾进行写操作(追加,但不重写以前的)。

        ③ FileOubputStream(String filePath):创建一个向具有指定名称的文件中写入数据的文件输出流。前提路径存在,写当前目录下的文件名或者全路径。

        ④ FileOubputStream(String filePath,boolean append):append为true则对当前文件末尾进行写操作(追加,但不重写以前的)。

        常用方法:

        ① void write(int d):写入int值的低8位。

        ② void write(byte[] d):将d数组中所有字节写入。

        ③ void write(byte[] d,int offset,int length):将d数组中offset位置开始写入length个字节。


    案例22:

        


 

3. 缓冲字节流BufferedInputStream和BufferedOutputStream 

    1)BufferedInputStream:缓冲字节输入流,构造器需要传入基本字节输入流BufferedInputStream(InputStream in) 

        常用方法:

            ① int read():从输入流中读取一个字节。

            ② int read(byte[] b,int offset,int length):从此字节输入流中给定偏移量offset处开始将各字节读取到指定的 byte 数组中。

    2)BufferedOutputStream:缓冲字节输出流,构造器需要传入基本字节输出流BufferedOutputStream(OutputStream out)

        常用方法:

            ① void write(int d):将指定的字节写入此缓冲的输出流。

            ② void write(byte[] d,int offset,int length):将指定 byte数组中从偏移量 offset开始的 length个字节写入此缓冲的输出流。

            ③ void flush():将缓冲区中的数据一次性写出,“清空”缓冲区。

    3)缓冲流内部维护着一个缓冲区,每次都尽可能的读取更多的字节放入到缓冲区,再将缓冲区中的内容部分或全部返回给用户,因此可以提高读写效率。

    4)有缓冲效果的流,一般为写入操作的流,在数据都写完后一定要flush,flush的作用是将缓冲区中未写出的数据一次性写出:bos.flush();即不论缓存区有多少数据,先写过去,缓冲区再下班~确保所有字符都写出

    5)使用JDK的话,通常情况下,我们只需要关闭最外层的流。


    案例23:

        


 

4. 转换流InputStreamReader和OutputStreanWriter

    以“单个字符”为单位读写数据,一次处理一个字符(unicode)。 字符流底层还是基于字节形式读写的,所以都是将字节流转成字符流。在字符输入输出流阶段,进行编码修改与设置。 

    所有字符流都是高级流。

    1)InputStreamReader:字符输入流。

        A.常用构造方法:

            InputStreamReader(InputStream in):创建一个字符集的输入流。

            InputStreamReader(InputStream in, String charsetName):创建一个使用指定字符集的输入流。

        B.常用方法:

            ① int read():读取单个字符。

            ② int read(char cs[], int offset, int length):读入字符数组中从offset开始的length长度的字符。

            ③ void close():关闭流。

 

    2)OutputStreamWriter:字符输出流

        A.常用构造方法:

            OutputStreamWriter(OutputStream out):创建一个字符集的输出流。

            OutputStreamWriter(OutputStream out, String charset):创建一个使用指定字符集的输出流。

        B.常用方法:

            ① void write(int c):写入单个字符。

            ② void write(char c[], int off, int len):写入从字符数组off开头到len长度的部分

            ③ void write(String str, int off, int len):写入从字符串off开头到len长度的部分。

            ④ void flush():将缓冲区中的数据一次性写出,“清空”缓冲区。

            ⑤ void close():关闭流。

 
5. 缓冲字符流BufferedReader和BufferedWriter

    可以以“行”为单位读写“字符”,高级流。 在字符输入输出流修改编码。 

    1)BufferedReader:缓冲字符输入流,以行为单位读字符

        A.常用构造方法:

            BufferedReader(Reader in):创建一个使用默认大小的缓冲字符输入流。

            BufferedReader(Reader in, int size):创建一个使用指定大小的缓冲字符输入流。

        B.常用方法:

            ① int read():读取单个字符。如果已到达流末尾,则返回-1。

            ② int read(char cbuf[], int off, int len):从字符数组中读取从off开始的len长度的字符。返回读取的字符数,如果已到达流末尾,则返回-1。

            ③ String readLine():读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行。如果已到达流末尾,则返回 null。EOF:end of file文件末尾。

            ④ void close():关闭流。


    案例24:

        


    案例25:

            


     2)BufferedWriter:缓冲字符输出流,以行为单位写字符

        A.常用构造方法:

            BufferedWriter(Writer out):创建一个使用默认大小的缓冲字符输出流。

            BufferedWriter(Writer out, int size):创建一个使用给定大小的缓冲字符输出流。

        B.常用方法:

            ① void write(int c):写入单个字符。

            ② void write(char[] c,int off,int len):写入字符数组从off开始的len长度的字符。

            ③ void write(String s,int off,int len):写入字符串中从off开始的len长度的字符。

            ④ void newLine():写入一个行分隔符。

            ⑤ flush():将缓冲区中的数据一次性写出,“清空”缓冲区。

            ⑥ close():关闭流。


     案例26:

        


 6. PrintWriter输出流

    是另一种缓冲“字符”输出流,以“行”为单位,常用它作输出,BufferedWriter用的少。

    1)Servlet:运行在服务器端的小程序,给客户端发送相应使用的输出流就是PrintWriter。

    2)写方法:println(String data):带换行符输出一个字符串,不用手动换行了。

    3)构造方式: 

        PrintWriter(File file):以行为单位向文件写数据

        PrintWriter(OutputStream out):以行为单位向字节输出流写数据

        PrintWriter(Writer writer):以行为单位向字符输出流写数据

        PrintWriter(String fileName):以行为单位向指定路径的文件写数据

    4)常用方法

        使用上和BufferedWriter一样,只是使用println()会自动换行。


    案例27: