Java_IO流(二)

IO流-字符流

FileReader(文件字符输入流)

  1. 作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去

  2. 构造方法:

    构造方法 说明
    pblic FileReader(File file) 创建字符输入管道与源文件接通
    pblic FileReader(String filepath) 创建字符输入管道与源文件接通
  3. 常见方法:

    方法名称 说明
    public int read() 每次读取一个字符返回,如果发现没有数据可读会返回-1
    public int read(char[] buffer) 每次读取一个字符数组返回,返回字符数组读取了多少个字符,如果发现没有数据可读会返回-1

FileWriter(文件字符输出流)

  1. 作用:以内存为基准,可以把内存中的数据以字符的形式写出到文件中去

  2. 构造方法:

    构造方法 说明
    public FileWriter(File file) 创建字符输出流管道与源文件对象接通
    public FileWriter(String filepath) 创建字符输出流管道与源文件对象接通
    public FileWriter(File file, boolean append) 创建字符输出流管道与源文件对象接通,可追加数据
    public FileWriter(String filepath, boolean append) 创建字符输出流管道与源文件对象接通,可追加数据
  3. 常见方法:

    方法名称 说明
    void write(int c) 写入一个字符
    void write(String str) 写入一个字符串
    void write(String str, int off, int len) 写入一个字符的一部分
    void write(char[] cbuf) 写入一个字符数组
    void write(char[] cbuf, int len) 写入字符数组的一部分
  4. 注意:字符输出流写出数据后,必须刷新流,或者关闭流,写出的数据才能生效

    方法名称 说明
    public void flush() throws IOException 刷新流,就是将内存中缓存的数据立即写到文件中去生效!
    public void close() throws IOException 关闭流的操作,包含了刷新!

IO流-缓冲流

  1. IO流体系:

  2. 缓冲流的作用:对原始流进行包装,以提高原始流读写数据的性能

字节缓冲流

  1. 原理:字节缓冲输入流自带8KB缓冲池;字节缓冲输出流也自带8KB缓冲池

  2. 字节缓冲流构造方法:

    构造方法 说明
    public BufferedInputStream(InputStream is) 把低级的字节输入流包装成一个高级的缓冲字节输入流,从而提高读数据的性能
    public BufferedOutputStream(OutputStream os) 把低级的字节输出流包装成一个高级的缓冲字节输出流,从而提高写数据的性能

字符缓冲流

  1. BufferedReader(字符缓冲输入流)

    • 作用:自带8K(8192)的字符缓冲池,可以提高字符输入流读取字符数据的性能

    • 构造方法:

      构造方法 说明
      public BufferedReader(Reader r) 把低级的字符输入流包装成字符缓冲输入流管道,从而提高字符输入流读字符数据的性能
    • 字符缓冲输入流新增的功能:按行读取字符

      方法名称 说明
      public String readline() 读取一行数据数据返回,如果没有数据可读了,会返回null
  2. BufferedWriter(字符缓冲输出流)

    • 作用:自带8K(8192)的字符缓冲池,可以提高字符输入流写出字符数据的性能

    • 构造方法

      构造方法 说明
      public BufferedWriter(Writer w) 把低级的字符输出流包装成字符缓冲输出流管道,从而提高字符输出流写字符数据的性能
    • 字符缓冲输出流新增功能:换行

      方法名称 说明
      public void newline() 换行

IO流-转换流

引出问题:不同编码读取会乱码

  1. 如果代码编码和被读取的文本文件编码是一致的,使用字符流读取文本文件时不会出现乱码
  2. 如果代码编码和被读取的文本文件编码是不一致的,使用字符流读取文本文件时就会出现乱码

InputStreamReader(字符输入转换流)

  1. 作用:解决不同编码时,字符流读取文本内容乱码的问题

  2. 解决思路:先获取文件的原始字节流,再将其按照真实的字符集编码转成字符输入流,这样字符输入流中的字符就不乱码了

  3. 构造方法:

    构造方法 说明
    public InputStreamReader(InputStream is) 把原始的字节输入流,按照代码默认编码转换成字符输入流(与直接使用FileReader的效果一样)
    public InputStreamReader(InputStream is, String chatset) 把原始的字节输入流,按照指定字符集编码成字符输入流(重点)

OutputStreamWriter(字符输出转换流)

  1. 作用:可以控制写出去的字符使用什么字符集编码

  2. 解题思路:获取字节输出流,再按照指定的字符集编码将其转换成字符输出流,以后写出去的字符就会用该字符集编码了。

  3. 构造方法:

    构造方法 说明
    public OutputStreamWriter(OutputStream os) 把原始的字节输出流,按照代码默认编码转换成字符输出流
    public OutputStreamWriter(OutputStream os, String chatset) 把原始的字节输出流,按照指定字符集编码成字符输出流(重点)

IO流-打印流

PrintStream

  1. 作用:打印流可以实现更方便、更高效的的打印数据出去,能够实现打印啥出去就是啥出去。

  2. 构造方法:

    构造方法 说明
    public PrintStream(OutputStream/File/String) 打印流直接通向字节输出流/文件/文件路径
    public PrintStream(OutputStream out, String chatset) 可以指定写出去的字符编码
    public PrintStream(OutputStream out, boolean autoFlush) 可以指定实现自动刷新
    public PrintStream(OutputStream out, boolean autoFlush, String encoding) 可以指定实现自动刷新,并可指定字符的编码
  3. 常用方法:

    方法名称 说明
    public void println(Xxx xx) 打印任意类型的数据出去
    public void write(int/byte[]/byte[]一部分) 可以支持写字节数据出去

PrintWriter

  1. 作用:打印流可以实现更方便、更高效的的打印数据出去,能够实现打印啥出去就是啥出去。

  2. 构造方法:

    构造方法 说明
    public PrintWriter(OutputStream/File/String) 打印流直接通向字节输出流/文件/文件路径
    public PrintWriter(String fileName, String chatset) 可以指定写出去的字符编码
    public PrintWriter(OutputStream out/Writer, boolean autoFlush) 可以指定实现自动刷新
    public PrintWriter(OutputStream out, boolean autoFlush, String encoding) 可以指定实现自动刷新,并可指定字符的编码
  3. 常用方法:

    方法名称 说明
    public void println(Xxx xx) 打印任意类型的数据出去
    public void write(int/byte[]/byte[]一部分) 可以支持写字符数据出去
  4. 打印流的一种应用:输出语句的重定向。

    1
    2
    3
    // 可以把输出语句的打印位置改到某个文件中去。
    PrintStream ps = new PrintStream(String fileName);
    System.setOut(ps);

IO流-数据流

DataOutputStream(数据输出流)

  1. 作用:允许把数据和其类型一并写出去

  2. 构造方法:

    构造方法 说明
    public DataOutputStream(OutputStream out) 创建新数据输出流包装基础的字节输出流
  3. 常用方法:

    方法名称 说明
    public final void writeByte(int v) throws IOException 将byte类型的数据写入基础的字节输出流
    public final void writeInt(int v) throws IOException 将int类型的数据写入基础的字节输出流
    public final void writeDouble(Double v) throws IOException 将double类型的数据写入基础的字节输出流
    public final void writeUTF(String str ) throws IOException 将将字符串数据以UTF-8编码成字节类型的数据写入基础的字节输出流
    public void write(int/byte[]/byte[]一部分) 支持写字节数据出去

DataInputStream(数据输入流)

  1. 作用:用于读取数据输出流写出去的数据。

  2. 构造方法:

    构造方法 说明
    public DataInputStream(InputStream is) 创建数据输入流包装基础的字节输入流
  3. 常用方法:

    方法名称 说明
    public final readByte() throws IOException 读取字节数据返回
    public final readInt() throws IOException 读取int类型的数据返回
    public final readDouble() throws IOException 读取double类型的数据返回
    public final readUTF() throws IOException 读取字符串数据(UTF-8)返回
    public int readInt()/read(byte[]) 支持读字节数据进来

IO流-序列化流

ObjectOutputStream

  1. 可以把Java对象进行序列化:把Java对象存入到文件中去。

  2. 构造方法:

    构造方法 说明
    public ObjectOutputStream(OutputStream out) 创建对象字节输出流,包装基础的字节输出流
  3. 常用方法:

    方法名称 说明
    public final void writeObject(Object o) throws IOException 把对象写出去
  4. 注意:对象如果要序列化,必须实现序列化接口(java.io.Serializable

ObjectInputStream

  1. 可以把Java对象进行反序列化:把存储在文件中的Java对象读入到内存中来。

  2. 构造方法:

    构造方法 说明
    public ObjectInputStream(InputStream is) 创建对象字节输入流,包装基础的字节输出流
  3. 常用方法:

    方法名称 说明
    public final Object readObject() 把存储在文件中的Java对象读出来
  4. 注意:如果不想让对象某个成员参与序列化,可使用transient修饰即可

补充知识:IO框架

什么是框架?

  1. 解决某类问题,编写的一套类、接口等,可以理解成一个半成品,大多框架都是第三方研发的。
  2. 好处:在框架的基础上开发,可以得到优秀的软件架构,并能提高开发效率
  3. 框架的形式:一般把类、接口等编译.class形式,再压缩成一个.jar结尾的文件发行出去

什么是IO框架?

  • 封装了Java提供的对文件、数据进行操作的代码,对外提供了更简单的方式来对文件进行操作,对数据进行读写等。

Commons-io

  1. Commons-io是apache开源基金组织提供的一组有关IO操作的小框架,目的是提高IO流的开发效率。

  2. FileUtils类:

    FileUtils类提供的部分方法展示 说明
    public static void copyFile(File srcFile, File destFile) 复制文件
    public static void copyDirectory(File srcFile, File destDir) 复制文件夹
    public static void deleteDirectory(File directory) 删除文件夹
    public static String readFileToString(File file, String encoding) 读数据
    public static void writeStringToFile(File file, String data, String charname, boolean append) 写数据
  3. IOUtils类:

    IOUtils类提供的部分方法展示 说明
    public static int copy(InputStream inputStream, OutputStream outputStream) 复制文件
    public static int copy(Reader reader, Writer writer) 复制文件
    public static void write(String data, OutputStream output, String charsetName) 写数据
  4. 导入commons-io框架到项目中去:

    • 项目中创建一个文件夹:lib
    • commons-io-x.xx.x.jar文件复制到lib文件夹
    • 在jar文件上点右键,选择Add as Library(添加为库) -> 点击OK
    • 在类中导包使用
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2024 LittleWin
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信