一. 前言
在上文中,我们讲解了《字节输入输出流》,这里再看一下字符输入输出流。
二. 字符输入流FileReader
字符输入流和字节输入流的步骤大致相同,而且字符输入流可以防止乱码的发生。
-
字符输入流的操作步骤:
-
使用File类确定要操作的文件
-
使用InputStreamReader的子类FileReader进行对象实例化
-
进行读操作
-
释放资源
package io.zhangjia.io; import java.io.*; public class Reader { public static void main(String[] args) throws IOException { // 1. 使用File确定要读取的文件 File file = new File("E:\\zhangjia\\text.txt"); // 2. 实例化FileReader FileReader reader = new FileReader(file); // 3. 开始读 char[] chars = new char[128];//长度任意,因为是字符,所以即使给单数也不会乱码 StringBuffer sb = new StringBuffer(); int len = -1; while((len = reader.read(chars)) != -1) { String s = new String(chars,0,len); sb.append(s); } System.out.println(sb); reader.close(); } }
三. 字符输出流FileWriter
字符输出流和字节输出流的步骤大致相同,而且字符输出流可以防止乱码的发生。
-
字符输入流的操作步骤:
-
使用File类确定要操作的文件
-
使用OutputStreamWriter的子类FileWriter 进行对象实例化
-
进行读操作
-
释放资源
package io.zhangjia.io; import java.io.File; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; public class Writer { public static void main(String[] args) throws IOException { // 1. 使用File确定要写入的文件 File file = new File("E:\\zhangjia\\text.txt"); // 2. 实例化FileWriter // FileWriter writer = new FileWriter(file,true);//在原文件内容基础上添加内容 FileWriter writer = new FileWriter(file);//替换源文件的内容 // 3. 开始写 String str = "张甲"; writer.write(str); writer.close(); } }
四. 字节流和字符流的区别
-
如果将字节流和字符流的close()方法都删除的时候,字节流可以正常写入数据,而字符流不能
-
字符流操作看起来操作的是字符数据,其实在类中做了转换(char->byte),将转换好的数据存储在缓冲区,不执cLose方法,缓冲区的数据不会被输出,如果有需求不能关闭字符流,可以使用flush方法强制清空缓冲区
-
磁盘上的文件都是以字节形式进行存储,比如:媒体文件(图片、音频、视频),文档等等。开发中大部分情况都是使用字节流操作,如果操作的数据有中文,需要使用字符流,因为字节流可能造成中文乱码。
请登录之后再进行评论