18.六种文件流、闭流、Properties类

本文详细介绍了Java中不同类型的I/O流,包括文件字节流FileInputStream和FileOutputStream,文件字符流FileReader和FileWriter,缓冲流BufferedInputStream和BufferedOutputStream,转换流InputStreamReader和OutputStreamWriter,对象流ObjectOutputStream和ObjectInputStream,以及标准流和Properties类的使用。同时,强调了在处理流时的闭流操作和注意事项。
摘要由CSDN通过智能技术生成

1、文件字节流

1.1 文件字节输入流FileInputStream类

  • 类的特点
    针对文件以字节为单位进行输入的工具类
  • 类的位置
    java.io
  • 类的构造器
    • public FileInputStream(File file)
      通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
    • public FileInputStream(String name)
      通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
  • 类的方法
    • public void close()
      关闭此文件输入流并释放与此流有关的所有系统资源。
    • public int read()
      从此输入流中读取一个数据字节。
    • public int read(byte[] b)
      从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。

1.2 文件字节输出流

  • 类的方法

    • public void close()
      关闭此文件输入流并释放与此流有关的所有系统资源。

    • public void write(byte[] b)
      将 b.length 个字节从指定 byte 数组写入此文件输出流中。

    • public void write(byte[] b, int off,int len)

      从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。

案例:复制文件

public class FileDemo02 {
   
	public static void main(String[] args) throws IOException {
   
		method02();
	}

	//以字节数组的方式进行复制文件
	private static void method02() throws IOException {
   
		//1.创建文件字节输入流对象
		FileInputStream fis = new FileInputStream("girl.jpg");
		//2.创建文件字节输出流对象
		FileOutputStream fos = new FileOutputStream("girl_copy.jpg");

		//3.以字节数组的方式进行文件的复制
		int len;

		byte[] bytes = new byte[8192];

		while ((len = fis.read(bytes)) != -1) {
   
			fos.write(bytes,0,len);
		}

		//4.关闭资源(先开后关,后开先关)
		fos.close();
		fis.close();
	}

	//以单个字节的方式进行复制文件
	private static void method01() throws IOException {
   
		//1.创建文件字节输入流对象
		FileInputStream fis = new FileInputStream("girl.jpg");
		//2.创建文件字节输出流对象
		FileOutputStream fos = new FileOutputStream("girl_copy.jpg");

		//3.以单个字节的方式进行文件的复制
		int len;

		while ((len = fis.read()) != -1) {
   
			fos.write(len);
		}
		//4.关闭资源(先开后关,后开先关)
		fos.close();
		fis.close();
	}
}

2、文件字符流

  • 目的与意义:

    字节流在读写中文文件时,先将所有的中文根据默认平台编码拆分成字节,在使用文件时,再将所有字节组成中文,在这个过程中容易出现重新组合失误的情况,出现了中文乱码,所以进行读写中文文件时,不应该以字节为单位,应该以字符为单位,可以有效的避免了重新组合时的失误乱码情况

2.1 文件字符输入流FileReader类

  • 类的特点
    针对文件以字符为单位进行读取操作的工具类
  • 类的位置
    java.io
  • 类的构造器
    public FileReader(File file)
    在给定从中读取数据的 File 的情况下创建一个新 FileReader。
    public FileReader(String fileName)
    在给定从中读取数据的文件名的情况下创建一个新 FileReader。
  • 类的方法
    public int read()
    读取单个字符。
    public int read(char[] cbuf)
    将字符读入数组。

2.2 文件字符输出流FileWriter类

  • 类的特点
    针对文件以字符为单位进行输出操作的工具类

  • 类的位置
    java.io

  • 类的构造器
    public FileWriter(File file)
    根据给定的 File 对象构造一个 FileWriter 对象。
    public FileWriter(File file,boolean append)
    根据给定的 File 对象构造一个 FileWriter 对象
    public FileWriter(String fileName)
    根据给定的文件名构造一个 FileWriter 对象。
    public FileWriter(String fileName,boolean append)
    根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

  • 类的方法
    public void close()
    关闭此流,但要先刷新它。
    public void write(int c)
    写入单个字符。
    public void write(char[] cbuf)
    写入字符数组。
    public void write(char[] cbuf,int off,int len)
    写入字符数组的某一部分。
    public void write(String str)
    写入字符串。
    public void write(String str,int off,int len)
    写入字符串的某一部分。
    public void flush()
    刷新该流的缓冲。

    关闭和刷新:
    关闭:释放资源,在释放前进行刷新
    刷新:不关闭流对象,将缓冲区中的内容写出到文件中

3、缓冲流(高效流)

3.1 缓冲字节高效流

缓冲字节输入流BufferedInputStream类

  • 类的特点
    针对其它字节输入流添加功能,具备高效读取操作的工具类
  • 类的位置
    java.io
  • 类的构造器
    public BufferedInputStream(InputStream in)
    创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。
  • 类的方法
    public void close()
    关闭此输入流并释放与该流关联的所有系统资源。
    public int read()
    参见 InputStream 的 read 方法的常规协定。
    public int read(byte[] b)
    从此输入流中将 byte.length 个字节的数据读入一个 byte 数组中。

缓冲字节输出流BufferedOutputStream类

  • 类的特点
    针对其它字节输出流添加功能,具备高效输出操作的工具类
  • 类的位置
    java.io
  • 类的构造器
    public BufferedOutputStream(OutputStream out)
    创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
  • 类的方法
    public void close()
    关闭此输出流并释放与此流有关的所有系统资源。
    public void write(int b)
    将指定的字节写入此缓冲的输出流。
    public void write(byte[] b,int off,int len)
    将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。

注意事项:
缓冲流之所以高效,原因就是在底层封装了一个长度为8192的数组
8192是时间和空间折中方案

在实际应用中更推荐使用文件流以长度8192的数组进行读写文件

3.2 缓冲字符输出流

缓冲字符输入流BufferedReader类

  • 类的特点

    针对其它字符输入流添加功能,具备高效读取操作的工具类

  • 类的位置

    java.io

  • 类的构造器

    public BufferedReader(Reader in)

    创建一个使用默认大小输入缓冲区的缓冲字符输入流。

  • 类的方法

    public String readLine()

    读取一个文本行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MelodyYN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值