字符流的底层其实就是字节流。
字符流=字节流+字符集
结构体系:
1.特点
输入流:一次读一个字节,遇到中文时,一次读多个字节。
输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中。
2.使用场景
对于纯文本文件进行读写操作。
3.字符输入流FileReader
步骤:
1.创建字符输入流对象
- public FileReader(File file):创建字符输入流关联本地文件
- public FileReader(string pathname):创建字符输入流关联本地文件
细节1∶如果文件不存在,就直接报错。
2.读取数据
- public int read():读取数据,读到末尾返回-1
遇到中文时,GBK一次读两个字节,UTF-8一次读三个字节。
案例1:
//
FileReader fr = new FileReader("G:\\JavaReview\\day31\\my.txt");
//读取数据
int ch;
while ((ch = fr.read()) != -1){
System.out.print((char) ch);
}
//
fr.close();
- public int read(char[] buffer):读取多个数据,读到末尾返回-1
细节1:按字节进行读取,遇到中文,一次读多个字节,读取后解码,返回一个整数。
细节2:读到文件末尾了,read方法返回-1。
案例2:
//创建对象
FileReader fr = new FileReader("G:\\JavaReview\\day31\\my.txt");
char[] chars = new char[2];
int len;
while ((len = fr.read(chars)) != -1){
System.out.print(new String(chars,0,len));
}
//释放资源
fr.close();
3.释放资源
4.字符输出流FileWriter
1.构造方法
- public Filewriter(File file):创建字符输出流关联本地文件
- public Filewriter(string pathname):创建字符输出流关联本地文件
- public Filewriter(File file, boolean append):创建字符输出流关联本地文件,续写
- public Filewriter(string pathname,boolean append):创建字符输出流关联本地文件,续写
2.成员方法
- void write(int c):写出一个字符
- void write(string str):写出一个字符串
- void write(string str, int off,int len):写出一个字符串的一部分
- void write(char[] cbuf):写出一个字符数组
- void write(char[ ] cbuf, int off, int len):写出字符数组的一部分
步骤:
1.创建字符输出流对象
细节1:参数是字符串表示的路径或者File对象都是可以的
细节2:如果文件不存在会创建一个新的文件,但是要保证父级路径是存在的
细节3:如果文件已经存在,则会清空文件,如果不想清空可以打开续写开关
2.写数据
细节:如果write方法的参数是整数,但是实际上写到本地文件中的是整数在字符集上对应的字符
3.释放资源
案例3:
FileWriter fw = new FileWriter("G:\\JavaReview\\day31\\my.txt",true);
// fw.write(25105);//我
// fw.write("你好啊");//你好啊
char[] chars = {'a','c','b','我'};
fw.write(chars);
fw.close();