当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为 一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件
1. 字符输出流Reader
java.io.Reader
抽象类是表示用于读取字符流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法
public void close() :
关闭此流并释放与此流相关联的任何系统资源public int read() :
从输入流读取一个字符public int read(char[] cbuf) :
从输入流中读取一些字符,并将它们存储到字符数组 cbuf中
1.1 FileReader类
java.io.FileReader
类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区
- 字符编码:字节与字符的对应规则。Windows系统的中文编码默认是GBK编码表。 idea中UTF-8
- 字节缓冲区:一个字节数组,用来临时存储字节数据
构造方法:
FileReader(File file) :
创建一个新的 FileReader ,给定要读取的File对象FileReader(String fileName) :
创建一个新的FileReader
,给定要读取的文件的名称。 当你创建一个流对象时,必须传入一个文件路径。类似于FileInputStream
package FileStream;
import java.io.FileReader;
/**
* @Description
* @auther 宁宁小可爱
* @create 2020-01-14 15:43
*/
public class FRRead {
public static void main(String[] args) throws Exception {
/* 此处创建对象也可以创建file对象 */
FileReader fr = new FileReader("test.txt");
/* 循环读取不使用数组接受 */
int b;
while ((b = fr.read()) != -1){
System.out.println((char)b);
}
/* 定义字符数组,装字节*/
FileReader fr1 = new FileReader("test.txt");
char[] cbuf = new char[2];
while ((b = fr1.read(cbuf)) != -1){
System.out.println(new String(cbuf));
}
fr.close();
fr1.close();
}
}
2. 字符输出流Writer
java.io.Writer
抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节 输出流的基本共性功能方法
public abstract void close() :
关闭此输出流并释放与此流相关联的任何系统资源public abstract void flush() :
刷新此输出流并强制任何缓冲的输出字符被写出public void write(int c) :
写出一个字符public void write(char[] cbuf) :
将 b.length字符从指定的字符数组写出此输出流public abstract void write(char[] b, int off, int len) :
从指定的字符数组写出 len字符,从偏移量 off开始输出到此输出流public void write(String str) :
写出一个字符串public write(String str, int off, int len) :
写出一个字符串的一部分
2.1 FileWriter类
java.io.FileWriter
类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区
构造方法:
FileWriter(File file) :
创建一个新的 FileWriter,给定要读取的File对象FileWriter(String fileName) :
创建一个新的 FileWriter,给定要读取的文件的名称
package FileStream;
import java.io.FileWriter;
import java.io.IOException;
/**
* @Description
* @auther 宁宁小可爱
* @create 2020-01-14 17:24
*/
public class FWWrite {
public static void main(String[] args) throws Exception {
FileWriter fw = new FileWriter("fw.txt");
// 写入一个字符
fw.write( 97);
// 刷新缓冲区 写入文件
fw.flush();
fw.write("b");
fw.write("c");
/* 写入换行符 特殊字符 */
fw.write("\r\n");
/* 分段写入 */
char[] chars = "宁宁小可爱".toCharArray();
fw.write(chars,0,chars.length);
/* 关闭资源 不关闭资源数据只存在缓冲区中, 并不会写入到文件*/
fw.close();
}
}
- 字符流,只能操作文本文件,不能操作图片,视频等非文本文件