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();
        }

  

  

一点一点积累,一点一点蜕变!
原文地址:https://www.cnblogs.com/qq2210446939/p/14665509.html