在Java学习篇之IO流(字节流)一文中,总结的是IO流中字节流的知识点,我们会发现,对于字节流来说,不管是读还是写,都是以字节为单位来操作的。假如我们读取拥有中文的文件时,使用的是字节流,那么读取到的都是一个一个的字节,还需要把这些字节拿去查阅对应的编码表,才能够得到与之对应的字符。这样做未免也太麻烦了,所以,这篇博客就介绍下专门操作字符的功能流对象——字符流。
字符输入流Reader
读方法
int read() 读取1个字符
int read(char[] c) 读取字符数组
子类对象 FileReader的构造方法
FileReader(File file)
FileReader(String fileName)
作用:绑定数据源
实例
import java.io.FileReader;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args) throws IOException {
// 创建一个字符输入流对象,必须明确数据源
FileReader fr=new FileReader("D:\\测试.txt");
//定义一个字符数组
char[] ch=new char[1024];
int len=0;
while((len=fr.read(ch))!=-1){
System.out.println(new String(ch,0,len) );
}
fr.close();
}
}
字符输出流Writer
写方法
write(int c) 写1个字符
write(char[] c)写字符数组
write(char[] c,int off,int len)字符数组一部分,开始索引,写几个
write(String s) 写入字符串
子类对象 FileWriter的构造方法
FileWriter(File file)
FileWriter(String FileName)
作用:写入的数据目的
实例
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterDemo {
public static void main(String[] args) throws IOException {
FileWriter fw=new FileWriter("D:\\说实话.txt");
//写1个字符
fw.write(115); //写入的是字母s
fw.flush();
//写一个字符数组
char[] ch={'u','n','l','i','n','a','n'};
fw.write(ch);
fw.flush();
//选取字符数组的一部分字符写入
fw.write(ch, 4, 3);
fw.flush();
//写字符串
fw.write("我真的是一个淑女啊!");
fw.flush();
fw.close();
}
}
PS:上述运行结果体现了笔者的自信……哈哈哈……
flush()和close()的区别
flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后再关闭流,流不可以使用。如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。