为什么要使用字符流

当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。
 

Writer

Writer抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。
  • void write(int c) 写入单个字符。
  • void write(char[] cbuf) 写入字符数组。
  • abstract void write(char[] cbuf, int off, int len) 写入字符数组的一部分,off表示数组的开始索引,len表示写的字符个数。
  • void write(String str) 写入字符串。
  • void write(String str, int off, int len) 写入字符串的某一部分,off表示字符串的开始索引,len写的字符个数。
  • void flush() 刷新该流的缓冲。
  • void close() 关闭此流,但要先刷新它。
 

1、FileWriter

FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
构造方法
  • FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象象。
  • FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称。

Reader

Reader抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。
  • public void close() :关闭此流并释放与此流相关联的任何系统资源。
  • public int read() : 从输入流读取一个字符。如果读取到最后返回-1
  • public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。返回的是读取的长度。如果读取到最后返回-1

2,FileReader

FileReader类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
构造方法
  • FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象。
  • FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称
Reader常用方法:
  • 1,读取单个字符 int read():每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回 -1
  • 2,使用字符数组读取数据,int read(char[] cbuf) ,每次读取b的长度个字符到数组中,返回读取到的有效字符个数,读取到末尾时,返回 -1
 示例读写:写
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer; /**
* @ClassName WriterStringToFile
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/17.
*/
public class WriterStringToFile {
public static void main(String[] args) throws IOException {
String fileFath = "输入输出文件读写/src/test/output/writerOut.txt";
Writer writer = new FileWriter(fileFath);
writer.write(97);//写入字符编码
writer.write('b'); //写入字符
char[] chars = {'e','f'};
writer.write(chars);
String text = "剑门关-V哥\n" +
"北望剑阁一线天,\n" +
"遥想翼德战关前。\n" +
"纵使王朝风云变,\n" +
"雄关笑傲数千年。";
writer.write(text);
// writer.flush();
writer.close();
}
}

 示例读写:读

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
/**
* @ClassName ReaderStringFromFile
* @projectName: object1
* @author: Zhangmingda
* @description: XXX
* date: 2021/4/17.
*/
public class ReaderStringFromFile {
public static void main(String[] args) throws IOException {
String srcPath = "输入输出文件读写/src/test/output/writerOut.txt";
Reader fileReader = new FileReader(srcPath);
StringBuffer text = new StringBuffer();
char[] characters = new char[1024];
int length;
while ((length = fileReader.read(characters)) != -1) {
// System.out.println( characters);
text.append(characters,0,length);
System.out.println("读取到字符个数:" + length);
}
fileReader.close(); //关闭字符流
System.out.println(text);
}
}

最新文章

  1. JavaScript中Promises/A+规范的实现
  2. DOM0级事件处理和DOM2级事件处理
  3. iOS开发 - AVPlayer实现流音频边播边存
  4. Eclipse的模板设置代码
  5. 【皇甫】☀亲爱的~help me
  6. ant design 自定义表单验证大全
  7. n条直线的最多交点
  8. Android 常规任务的高度【schedule】与【scheduleAtFixedRate】差额
  9. [osg]osg显示中文信息
  10. POJ 3128 Leonardo's Notebook [置换群]
  11. [BZOJ1006] [HNOI2008] 神奇的国度 (弦图)
  12. WebGL three.js学习笔记 使用粒子系统模拟时空隧道(虫洞)
  13. leetcode刷题——一些算法技巧总结2.0
  14. 三方面搞定http协议之“请求方法”
  15. Linux 安装MongoDB 并设置防火墙,使用远程客户端访问
  16. OpenStack 云主机深入了解(十四)
  17. MySQL中表复制:create table like 与 create table as select
  18. 杂项:NoSQL
  19. [剑指Offer] 64.滑动窗口的最大值
  20. redis三种连接方式

热门文章

  1. mybatis新增账号并且返回主键id
  2. maven插件慢的解决方案
  3. jmeter中执行kafka topic指令
  4. Codeforces Round #683 (Div. 1) Solution
  5. clickhouse使用的一点总结
  6. 【R读取报错】解决: Can't bind data because some arguments have the same name
  7. 5.Maximum Product Subarray-Leetcode
  8. 日常Java 2021/11/13
  9. 面试 Java 后端开发的感受
  10. ython学习笔记(接口自动化框架 V2.0)