IO流

流的分类:

        1.按照方向分:输入流InputStream和输出流OutputStream

        2.按照读写单位分:字节流InputStream/OutputStream和字符流 Reader/Writer

        3.按照功能分为:节点流和处理流

其中有四大抽象类:

        1.InputStream    2.OutputStream

        3.Reader            4.Writer


输入/输出流:

1) 文件字节流:FileInputStream

        java.io.InputStream抽象类

        --java.io.FileInputStream:继承了InputStream类从文件系统中的文件获取输入文字

构造方法:

    FileInputStream(File file);创建一个读取对象

    FileInputStream(String name);创建一个读取对象并输入指定的文件路径

常用的方法:

    int read();从该输入流读取一个字节的数据,如果达到文件的末尾返回-1

    int read(byte[ ] b);读取该数组中最多b.length长度的字节

    void close();关闭流

Code examples:

Code examples

Operation results:

Operation results

2)文件字节流:FileOutputStream

    java.io.OutputStream:抽象类

    --java.io.FileOutputStream:继承了OutoputStream,文件输出流是用于将文件写入到输出流File

构造方法:

        FileOutputStream(File file);创建文件输出流以写入由指定的 File对象表示的文件。

        FileOutputStream(String name);创建文件输出流以指定的名称写入文件。

        FileOutputStream(File file, boolean append);创建文件输出流以写入由指定的 File对象表示的文件。

        FileOutputStream(String name, boolean append);创建文件输出流以指定的名称写入文件。

常用的方法:

        将指定的文件写入到目的地:wtite(int b);

        将字符串转为byte类型的数组:str.getBytes( );

        关闭流:close( );

Code examples:

Code examples

Operation results:

Operation results

3)文件字符流:FileReader/FileWriter

        用法与文件字节流非常相似,也是用于读取硬盘并写入数据,直接写例子来看

       用文件字符流实现复制文件:

方法1:Code examples:

Code examples

Operation results  :

Operation results

方法2:Code examples:

Code examples

Operation results :

Operation results  

4)缓冲流

缓冲字节流:BufferedInputStream/BufferedOutputStream

    缓冲流:可以提高我们的工作效率

    BufferedInputStream的构造方法:

     BufferedInputStream(InputStream in);创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。

    BufferedInputStream的常用方法:

     int read(byte[ ] b, int off, int len);从给定的偏移开始,将字节输入流中的字节读入指定的字节数组。 

    read(byte[ ] bs);

    close:关闭流

    缓冲字符流:BufferedReader/BufferedWriter

Code examples:

Code examples

Operation results:

Operation results

缓冲字符流:

        缓冲字符流:BufferedReader/BufferedWriter

        缓冲流要配合字节流使用!

BufferedReader常用的方法:

        String readline();读取一行数据,如果读到结尾返回null

        void close();关闭流

BufferWriter的常用方法:

        write(String str);将字符串写入目的地

        newLine();换行

        flush();刷新流

        void close();关闭流

Code examples:

Code examples

Operation results:

Operation results

5)转换流

    将字节流转换为字符流,属于处理流(必须与节点流结合使用)

        InputStreamReader:将InputStream转换为Reader

        OutputStreamWriter:将OutputStream转换为Writer

InputStreamReader的构造方法:

        InputStreamReader(InputStream in);给定一个字节流路径使用默认的编码字符集

        InputStreamReader(InputStream in, Charset cs);给一个字节流路径并给定编码字符集

InputStreamReader的常用方法:

        int read();读一个字符

        int read(char[ ] cbuf, int offset, int length);将字符读入数组的一部分。

        void close();关闭流并释放与之相关联的任何系统资源。 

OutputStreamWriter构造方法:

        OutputStreamWriter(OutputStream out);创建一个使用默认字符编码的OutputStreamWriter。

        OutputStreamWriter(OutputStream out, Charset cs);创建一个使用给定字符集的OutputStreamWriter。

OutputStreamWriter常用方法:

        void write(int c);写一个字符

        void write(char[] cbuf, int off, int len);写入字符数组的一部分。

        void close();关闭流,先刷新。

Code examples:

Code examples

Operation results :

Operation results 

Operation results :

Operation results 

6)序列化与反序列化

        对象流:以"对象"为数据源,可以对"对象"进行读取操作,属于处理流

        使用对象读写数据是要求该对象所对应的类型必须实现序列化接口,否则将抛出java.io.InvalidClassException异常

            ObjectInputStream:readObject()

            ObjectOutputStream:writeObject(Object obj)

         序列化:Java对象--->字节序列 对象转换为字节序列的过程

        反序列化:字节序列--->Java对象 字节序列转化为对象的过程

序列化注意的事项:

        1.static属性不参与序列化

        2.对象中的某些属性如果不想被序列化,不能使用static,而是使用transient修饰

        3.为了防止读和写的序列化ID不一致,一般指定一个固定的序列化ID

Code examples:

Code examples

Operation results :

Operation results 

7)文件夹的复制

文件夹的复制:

    1.复制文件夹(在目标位置创建相同的文件夹)需要用到递归

    2.文件的复制(使用输入流读取源文件,使用输出流将读取到的文件内容写入目的地)

Code examples:

Code examples

Operation results :

Operation results 

8) IO流体系中的装饰器模式:

    设计模式(GoF):设计模式供23种.是对经典问题的典型解决方案,通过设计模式可以将程序编写的更加优美("高内聚,低耦合")

    装饰器模式:它可以实现对原有类的包装和装饰,使新的类具有更强的功能

    优点:动态地为对象增加新的功能或者撤销功能(继承就不能做到这一点)

    缺点:会产生过多的相似的对象,不容易排错!

Code examples:

Code examples

Operation results:

Operation results

9)Apache IOUtils的使用_Apache FileUtils的使用

FieUtils类中常用方法:

    1.cleanDirectory:清空目录,但不删除目录。

    2.contentEquals:比较两个文件的内容是否相同。

     3.copyDirectory:将一个目录内容拷贝到另一个目录。可以通过FileFilter过滤需要拷贝的 文件。

     4.copyFile:将一个文件拷贝到一个新的地址。

     5.copyFileToDirectory:将一个文件拷贝到某个目录下。

     6.copyInputStreamToFile:将一个输入流中的内容拷贝到某个文件

     7. deleteDirectory:删除目录。

     8. deleteQuietly:删除文件。

     9.listFiles:列出指定目录下的所有文件。

     10.openInputSteam:打开指定文件的输入流。

     11.readFileToString:将文件内容作为字符串返回。

     12. readLines:将文件内容按行返回到一个字符串数组中。

     13. size:返回文件或目录的大小。

     14. write:将字符串内容直接写到文件中。

     15. writeByteArrayToFile:将字节数组内容写到文件中。

     16. writeLines:将容器中的元素的toString方法返回的内容依次写入文件中。

     17. writeStringToFile:将字符串内容写到文件中。

IOUtils中常用的类:

      1. buffer方法:将传入的流进行包装,变成缓冲流。并可以通过参数指定缓冲大小。

      2. closeQueitly方法:关闭流。

      3. contentEquals方法:比较两个流中的内容是否一致。

      4. copy方法:将输入流中的内容拷贝到输出流中,并可以指定字符编码。

      5. copyLarge方法:将输入流中的内容拷贝到输出流中,适合大于2G内容的拷贝。

      6. lineIterator方法:返回可以迭代每一行内容的迭代器。

      7. read方法:将输入流中的部分内容读入到字节数组中。

      8. readFully方法:将输入流中的所有内容读入到字节数组中。

      9. readLine方法:读入输入流内容中的一行。

      10. toBufferedInputStream,toBufferedReader:将输入转为带缓存的输入流。

      11. toByteArray,toCharArray:将输入流的内容转为字节数组、字符数组。

      12. toString:将输入流或数组中的内容转化为字符串。

      13. write方法:向流里面写入内容。

      14. writeLine方法:向流里面写入一行内容。


流框架梳理:

流:

一.按照流的方向分类:

    输入流:程序读取数据(InputStream、Reader)

    输出流:程序把数据写入到目的地(OutPutStream、Writer)

    IO的四大抽象类:InputStream、OutputStream、Reader、Writer

二.按照流的处理数据单元分类:

1.字节流:按照字节读取(InputStream、OutputStream)

1.1.InputStream的实现类:

    FileInputStream:输入字节流

    ByteArrayInputStream:数组字节输入流

    BufferedInputStream:缓冲字节输入流(需要配合节点流使用)

    DataInputStream:数据字节输入流

    ObjectInputStream:对象字节输入流(反序列化)

1.2.OutputStream的实现类:

    FileOutputStream:输出字节流

    ByteArrayOutStream:数组字节输出流

    BufferedOutputStream:缓冲字节输出流

    DataOutputStream:数据字节输出流

    ObjectOutputStream:对象字节输出流(序列化)

    PrintStream:打印字节输出流

2.字符流:按照字符读取数据(Reader、Writer)

2.1.Read的实现类:

    FileReader:读取字符数据

    BufferedReader:缓冲字符读取流(需要配合节点流使用)

    InputStreamReader:转换流,配合节点流使用

2.2.Writer的实现类:

    FileWriter:写入字符数据

    BufferedWriter:通过缓冲区写入字符数据,配合节点流使用

    OutputStreamWriter:转换流,一般配合缓冲流使用

三.按照流的功能来分:

    节点流:可以直接从数据源或目的地读写数据

    处理流:通过对其他流的处理提高程序的性能,配合节点流使用

    序列化:Java对象--->字节序列 对象转换为字节序列的过程

    反序列化:字节序列--->Java对象 字节序列转化为对象的过程

IO流框架图

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容