java输入输出流03_字符流

1.Writer类

Writer写入字符流的抽象类,操作数据的最下单位为1个字符。操作的数据都是字符,定义了写入字符流的基本共性功能方法。

Writer类中常见的方法:
在这里插入图片描述

2.FileWriter类

FileWriter类从OutputStreamWriter类继承而来,FileWriter类用于存储文件,用来读取字符文件的便捷类。
在这里插入图片描述

  • 构造方法
    在这里插入图片描述
  • 写入数据到文件中

【示例】将数据写到文件中

public class FileWriteDemo {
	public static void main(String[] args) {
		Writer fw = null;
		try {
			// 创建字符输出流,明确需要操作的文件
			fw = new FileWriter("demo.txt");
			// 写入字符文件
			fw.write("hello world!");
			// 强制刷新保存数据
			fw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(fw != null) {
				try {
					// 关闭流,刷新数据+关闭流
					fw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}	
			}
		}
	}
}
  • flush()和 close()的区别
    在这里插入图片描述

flush(): 将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。

close(): 关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。关闭流之后就不能再做write()或flush()操作,否则抛出异常。

  • 给文件中续写

发现在 FileWriter 的构造函数中,可以接受一个 boolean类型的值,如果值 true,就会在文件末位继续添加。

【示例】将数据续写到文件中

public class FileWriteDemo01 {
	public static void main(String[] args) {
		Writer fw = null;
		try {
			// 创建字符输出流,明确需要操作的文件
			fw = new FileWriter("demo.txt", true);
			// 写入字符文件
			fw.write("hello world!");
			// 强制刷新保存数据
			fw.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(fw != null) {
				try {
					// 关闭流,刷新数据+关闭流
					fw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}	
			}
		}
	}
}

3.Reader类

Reader用于读取字符流的抽象类,数据单位为字符。操作的数据都是字符,定义了输出字符流的基本共性功能方法。

Reader类中常见的方法:
在这里插入图片描述
read(): 读取单个字符并返回,字符的值作为int类型返回(0-65535之间的一个值,Unicode值)。如果未读出字符则返回-1。

read(char[]): 将数据读取到数组中,并返回读取的个数。如果未读出字符则返回-1。

4.FileReader类

FileReader类从InputStreamReader类继承而来,FileReader类用于读取文件,用来读取字符文件的便捷类。
在这里插入图片描述

  • 构造方法
    在这里插入图片描述

  • 读取数据 read()方法

在读取文件中的数据时,调用 read 方法一次读一个字符,从而实现从文件中读取数据。

【示例】读取数据 read() 方法

public class FileReaderDemo01 {
	public static void main(String[] args) {
		FileReader fr = null;
		try {
			// 创建一个读取流对象,一定要明确读取的文件,并且保证文件路径正确
			fr = new FileReader("demo.txt");
			StringBuffer sb = new StringBuffer();
			int len = 0;
			// 一次读取一个字符,当返回值为-1,则数据读取完毕
			while ((len = fr.read()) != -1) {
				sb.append((char) len);
			}
			System.out.println("string: " + sb);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fr != null) {
				try {
					fr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
  • 读取数据 read(char[])方法

在读取文件中的数据时,调用 read ()方法,每次只能读取一个字符,太麻烦了,于是我们可以定义数组作为临时的存储容器,这时可以调用重载的 read 方法,一次可以读取多个字符。

【示例】读取数据 read(char[])方法

public class FileReaderDemo {
	public static void main(String[] args) {
		FileReader fr = null;
		try {
			// 创建一个读取流对象,一定要明确读取的文件,并且保证文件路径正确
			fr = new FileReader("demo.txt");
			StringBuffer sb = new StringBuffer();
			int len = 0;
			char[] buf = new char[1024];
			// 一次性读取多个字符,当返回值为-1,则数据读取完毕
			while ((len = fr.read(buf)) != -1) {
				sb.append(new String(buf, 0, len));
			}
			System.out.println(sb);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fr != null) {
				try {
					fr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

5.字符流文件拷贝案例

原理:读取一个已有的数据,并将这些读到的数据写入到另一个文件中。

【示例】字符流文件的拷贝案例

public class FileWriteReaderDemo {
	public static void main(String[] args) throws IOException {
		// 创建文件读取流
		FileReader fr = new FileReader("E://demo.txt");
		// 创建文件写入流
		FileWriter fw = new FileWriter("F://demo.txt");
		// 读取数据
		int len = 0;
		char[] buf = new char[1024];
		// 读取文件中的数据
		while ((len = fr.read(buf)) != -1) {
			// 保存读取的数据
			fw.write(buf, 0, len);
		}
		// 关闭流
		fr.close();
		fw.close();
	}
}

ps:如需最新的免费文档资料和教学视频,请添加QQ群(627407545)领取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值