Java.Reader_Writer

本文介绍Java中字符流的基本概念及使用方法,包括Reader和Writer类的应用,对比字符流与字节流的区别,并通过示例代码展示如何使用FileWriter进行字符数据的写入以及FileReader读取字符数据。

java中的字符是Unicode编码的, InputStream和OutputStream都是用来处理字节的,在处理字符时需要用getBytes()转换成字节,这就需要编写字节、字符之间的转换代码
java中提供了单独的类对IO设备进行字符输入与输出

Reader和Writer是所有字符流类的的抽象基类,用于简化对字符串的输入输出编程,即用于读写文本数据

二进制文件和文本文件的区别
如果一个文件专用于存储文本字符,而又没有包含文本之外的字符,就可称之为文本文件。除此之外的文件就是二进制文件
Reader和Writer两个类主要用于操作文本数据的内容,而InputStream和OutputStream主要操作二进制格式的内容

FileInputStream.write(byte [] buf)写入字节数组,会自动调用flush方法
FileInputStream.write(byte b)写入单个字节,此方法不调用flush()方法

FileWriter.write(char [] cbuf)写入字符数组,不会自动调用flush方法

使用FileWriter写入字符数据比FileOutputStream要简便很多,但是FileReader并不比FileInputStream读取字符数据要简便多少,都是要先读取到一个字符数组或者字节数组中,然后把数组转换成字符串。
但是以后用包装类处理文本文件的时候就要用到FileReader

 

Java 中,`BufferedReader` 类的构造函数 `BufferedReader(java.io.Reader)` 要求传入一个 `Reader` 类型的参数,而 `FileWriter` 是 `Writer` 类型,并非 `Reader` 类型,所以会出现 `'BufferedReader(java.io.Reader)' in 'java.io.BufferedReader' cannot be applied to '(java.io.FileWriter)'` 错误。 为解决该错误,需要传入正确的 `Reader` 类型对象,例如 `FileReader` 或 `InputStreamReader`。以下是几种解决示例: ### 使用 `FileReader` ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class CorrectBufferedReaderUsage { public static void main(String[] args) { try { // 创建一个 FileReader 对象 java.io.FileReader fileReader = new java.io.FileReader("source.txt"); // 使用 FileReader 创建 BufferedReader java.io.BufferedReader reader = new java.io.BufferedReader(fileReader); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } // 关闭 BufferedReader reader.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` ### 使用 `InputStreamReader` ```java import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class CorrectBufferedReaderUsageWithISR { public static void main(String[] args) { try { // 创建一个 FileInputStream 对象 java.io.FileInputStream fileInputStream = new java.io.FileInputStream("source.txt"); // 创建 InputStreamReader 对象,指定字符编码 java.io.InputStreamReader inputStreamReader = new java.io.InputStreamReader(fileInputStream, "UTF-8"); // 使用 InputStreamReader 创建 BufferedReader java.io.BufferedReader reader = new java.io.BufferedReader(inputStreamReader); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } // 关闭 BufferedReader reader.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` ### 总结 错误原因是传入 `BufferedReader` 构造函数的参数类型不匹配,解决方法是使用 `FileReader` 或 `InputStreamReader` 等 `Reader` 类型的对象来创建 `BufferedReader`。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值