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

一个汉字储存:

GBK编码:占用2个字节

UTF-8编码:占用3个字节

字符输入流Reader:

java.io.Reader抽象类:用于读取字符流的所有类的超类,可以读取字符信息到内存中。

int read():读取单个字符并返回

int read(char[] cbuf ):一次读取多个字符,将字符读入数组

void close():关闭该流并释放与之关联的所有资源

文件输入流:

java.io.FileReader:文件字符输入流,把文件中的字符读取到内存中

构造方法:

FileReader(String fileName)

FileReader(File file)

fileName:文件路径 FIle:文件

使用:

1、创建FileReader对象,构造方法中绑定要读取的数据源

2、使用FileReader对象中的方法read读取文件

3、释放资源

一次读取一个字符

FileReader fr=new FileReader("C:\\Users\\暮色年华\\Desktop\\a.txt");
int len=0;
while((len=fr.read())!=-1){
   System.out.print((char)len);
 }
fr.close();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

一次读取多个字符

String(char[] value,int offset,int len):把字符数组的一部分转换为字符串

FileReader fr=new FileReader("C:\\Users\\暮色年华\\Desktop\\a.txt");
char[]cs=new char[1024];
int len=0;
while((len=fr.read(cs))!=-1){
    System.out.println(new String(cs,0,len));
}
fr.close()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

 字符输出流:

OutputStreamWriter:

文件字符输出流:

FileWriter(String FileName,boolean append)

FileWriter(File file,boolean append)

【Java笔记】IO流(2):字符流_java

 一次写入一个字符

FileWriter fw=new FileWriter("C:\\Users\\暮色年华\\Desktop\\a.txt");
fw.write(97);
fw.flush();
fw.write(98);
fw.close();
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

写入字符后,必须先刷新,才能写入到文件中去

void flush():刷新流   flush调用可以进行写数据

void close():关闭流,先刷新  close调用后不能继续写数据


一次写入多个字符

FileWriter fw=new FileWriter("C:\\Users\\暮色年华\\Desktop\\a.txt");
char[] chs={'a','b','c'};
fw.write(chs);
fw.close();
  • 1.
  • 2.
  • 3.
  • 4.

一次写入一个字符串

FileWriter fw=new FileWriter("C:\\Users\\暮色年华\\Desktop\\a.txt");
 String s="asdc";
 fw.write(s);
 fw.close();
  • 1.
  • 2.
  • 3.
  • 4.

字符流的续写和换行

续写:append参数设为TRUE

换行:换行符

使用try..catch...finally处理流中的异常

JDK9:try前边可以定义流对象,在try后边的()中可以直接引用流对象的名称(变量名)

在try代码执行完毕之后,流对象也可以释放掉,不用写finally

【Java笔记】IO流(2):字符流_后端_02