首先,字符流可以理解为字节流加上字符集,字符流分为字符输入流与字符输出流,即Reader与Writer,接下来简单介绍一下FileWriter与FileReader;
1.FileReader
FileReader又分为空参与有参,空参是把字节解码并且转成十进制返回。有参即把读取字节,解码,强转三步合并了,强转后的字符放到数组中
public int read()//读取数据,读到末尾返回-1
public int read(char[] buffer)//读取多个数据,读到末尾返回-1
按照字节进行读取,遇到中文一次读取多个字节,读取后解码,返回一个整数(十进制)
具体用法可以参考以下俩个例子(a.txt中存储了若干中文)
import java.io.*;
public class test {
public static void main(String[] args) throws IOException {
FileReader fr=new FileReader("src\\a.txt");
int ch;
while((ch=fr.read())!=-1){
System.out.print(ch);
}
fr.close();
}
}
运行上面这个代码结果会是一堆数字,原因是read底层在读取之后还会进行解码并转成十进制并且把它返回,这个数据也表示字符集上的数字
我们只需要加上char进行强转即可打印a.txt中的中文
import java.io.*;
public class test {
public static void main(String[] args) throws IOException {
FileReader fr=new FileReader("src\\a.txt");
int ch;
while((ch=fr.read())!=-1){
System.out.print((char)ch);
}
fr.close();
}
}
有参:
import java.io.*;
public class test {
public static void main(String[] args) throws IOException {
FileReader fr=new FileReader("src\\a.txt");
char[] s=new char[3];
int len;
while((len=fr.read(s))!=-1){
System.out.print(new String(s,0,len));
}
fr.close();
}
}
2.FileWriter
其构造方法有
public FileWriter(File file)//创建字符输出流关联本地文件
public FileWriter(String pathname)//创建字符输出流关联本地文件
public FileWriter(File file,boolean append)//开启续写
public FileWriter(File pathway,boolean append)//开启续写
创建字符输出对象时候,参数是字符串表示的路径或者File对象都是可以的,因为在底层。如果传递的是字符串表示的路径,会自动new一个FIle对象。如果文件不存在会自动创建一个新的文件,但是要保证父级路径是存在的
成员方法有
void write(int c)//写出一个字符
void write(String str)//写出一个字符串
void write(String str,int off,int len)//写出一个字符串的一部分
void write(cahr[] chars)//写出一个字符数组
void write(char[] chars,int off,int len)//写出一个字符数组的一部分
如果write方法的参数是整数,但是实际上写到本地文件的是整数在字符集上对应的字符