什么是字符流?
当我们在使用字节流读取文件时,可能会遇到一个小问题,就是在读取中文字符时,可能会显示不完整的字符,而这个原因就是使用的格式不同,一个中文字符可能会占用多个字节存储。比如UTF-8格式中,中文字符就占三个字节。所以Java中提供了字符流,以字符为单位,专门处理一些文本文件。
字符流的分类
字符流也和字节流一样,分为字符输入流和字符输出流。
什么是字符输入流?
字符输入流在Java中有一个类叫Reader,这个类也是一个抽象类,也是读取所有字符流的超类,就是读取字符信息到内存中。它定义了一些基本的共性功能方法。
基本共性功能方法
read()
从输入流读取一个字符
read(char[] cbuf)
从输入流读取多个字符,并存储到数组中。
close()
关闭流释放资源
字符输入流的使用
public static void main(String[] args) throws IOException {
File desktopDir = FileSystemView.getFileSystemView().getHomeDirectory();
File file = new File("D:/a.txt");
// 创建一个文件字符输入流与源文件接通
Reader in = new FileReader(file);
// 声明一个数组
char[] chars = new char[10];
int n = in.read(chars);
String str1 = new String(chars, 0, n);
System.out.println(str1);
int n1 = in.read(chars);
String str2 = new String(chars, 0, n1);
System.out.println(str2);
}
什么是字符输出流?
就是将数据从内存写入到硬盘中的文件,Writer就是字符输出流的父类,而它也是一个抽象类,是所有字符输出流的最顶层父类,它定义了字符输出流的基本共性功能方法,而抽象类是无法直接使用的,我们就通过它的一些子类来学习这个类。以下就是一些基本共性功能方法和子类。
字符输出流的分类
字符输出流分为以下几个类:
BufferedWriter:带缓冲流的
CharArrayWriter:写入字符数组的
FilterWriter:带过滤器到的
OutputStreamWriter:转换流
PipedWriter:管道流
StringWriter写入字符串的
字符输出流的使用
public static void main(String[] args) throws IOException {
File file = new File("D:/b.txt");
if (!file.exists()) {
file.createNewFile();
}
Writer out = new FileWriter(file);
out.write(97);
out.write((int) '我');
char[] chars = {'去','去','去'};
out.write(chars,0,2);
out.write("南阳");
out.flush();
out.close();
}