zoukankan      html  css  js  c++  java
  • IO流详解及常用方法

    简述

      IO流指的就是内存到硬盘的路径,从硬盘到内存我们称为输入流,从内存到硬盘我们称为输出流。根据数据的类型我们还可以把IO流分为字节流和字符流,一个字符等于2个字节。

      一个中文在GBK中占两个字节,在UTF-8中占三个字节,所以我们用字节的输入输出流读取/写入中文时,会有些困难

      所以java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。

      任意的文本编辑器,在打开文件的时候,都会查询编码表,将字节转化为字符表示

      如果在0到127范围就会查询ASCII码表,如果是其他值就会查询系统默认编码表,UTF-8三个字节是一个中文,GBK两个字节是一个中文

      windows系统的换行符是 ,linux系统的换行符是/n,mac是/r

     字节输出流OutputStream

      这是一个抽象类,表示所有字节输出流的超类。

      输出流的本质就是在指定路径创建一个空的文件,然后对此空文件进行操作。

      close() 关闭输出流

      flush() 刷新此输出流

      write(byte[] b)将b.length字节从指定的byte数组写入此输出流

    常用子类FileOutputStream 

    简述

      FileOutputStream是文件字节输出流,继承OutputStream,作用是把内存中的数据写入到硬盘的文件中。

    构造方法:

      FileOutputStream(File file) 创建一个向指定File对象表示的文件中写入数据的文件输出流

      FileOutputStream(String name) 创建一个向指定文件名称表示的文件中写入数据的文件输出流

      FileOutputStream(File file,boolean append) append表示是否追加数据

      FileOutputStream(String name,boolean append) append表示是否追加数据

      若使用下面两个构造函数,则创建对象时不会创建空文件,而是继续在末尾追加数据

    字节输入流InputStream

      read() 读取输入流数据的下一个字节,读取到文件的末尾就返回-1

      read(byte[] b) 从输入流中读取一定量的字节,将其存储到缓冲区数组b中

      close() 关闭资源

    常用子类FileInputStream

    简述

      FileInputStream是文件字节输入流,继承InputStream,作用是把硬盘中的数据读入到内存中

    构造方法

      FileInputStream(File file)

      FileInputStream(String name)

    字符输入流Reader

      Reader表示用于读取字符流的所有类的超类,可以读取字符信息到内存中  

      void close() 关闭此字符流

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

      int read(char[] buf) 从输入流中读取一些字符,并将它们存储到字符串数组buf中

    常用子类FileReader

    简述

      读取文件的字符输入流,该类继承InputStreamReader,InputStreamReader继承Reader

      作用是把硬盘文件中的数据以字符的方式读入内存中

    构造方法

      FileReader(File file)

      FileReader(String name)

    字符输出流Writer

      Writer是字符输出流的超类

      close() 关闭此流

      write(char[] cbuf) 写入字符数组

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

      write(int c) 写入单个字符

      write(String str) 写入单个字符串

      write(String str,int off ,int len) 写入字符串的某一部分

    常用子类FileWriter

    简述

      输出文件的字符输出流,该类继承OutputStreamWriter,OutputStreamWriter继承Write

      注意字符输出流的write是将数据写入内存的缓冲区中(字符转化为字节的过程)

      需要调用flush或者关闭资源才会将数据从缓冲区刷到硬盘

      作用是把内存中的数据以字符的方式输出到硬盘中

    构造方法

      FileWriter(File file)

      FileWriter(String name)

      FileWriter(File file,boolean append)

      FileWriter(String name,boolean append)

    流的异常处理

      在jdk1.7之后,可以在try后增加一个小括号,在括号内可以定义流对象,那么这个流对象的作用域就在try中有效,try中的代码执行完毕时会自动地把流对象释放,这样做可以简化IO流的异常处理

    try(FileInputStream fileInputStream = new FileInputStream("c:\1.jpg");
                FileOutputStream fileOutputStream = new FileOutputStream("d:\1.jpg");
                ){
                byte[] bytes = new byte[1024];
                int len = 0;
                while((len = fileInputStream.read(bytes))!=-1){
                    fileOutputStream.write(bytes,0,len);//写bytes的有效区间
                }
            }catch (IOException e){
                e.printStackTrace();
            }

      

      

    一点一点积累,一点一点蜕变!
  • 相关阅读:
    一次心惊肉跳的服务器误删文件的恢复过程
    ThreadPoolExecutor使用详解
    Springboot学习笔记(一)-线程池的简化及使用
    springboot之异步调用@Async
    CentOS 7添加开机启动服务/脚本
    三分钟在任何电脑上使用 chrome os
    Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Nacos
    Nacos部署中的一些常见问题汇总
    Spring Cloud Alibaba基础教程:Sentinel Dashboard中修改规则同步到Apollo
    Spring Cloud Alibaba 新版本发布:众多期待内容整合打包加入!
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/14665509.html
Copyright © 2011-2022 走看看