因为字节流不能很好地操作本身容量单位较大的数据(一个字符有时等于多个字节),所以需要字符流。
如果存在那种由多个字节组成的字符,那么用字节输入流读取,则会乱码!!!
但是,如果用字符输入流读取,就不会出现乱码!! 所以为了保险起见,尽量少用字节流。
1.文件字符IO流
文件字符IO流和文件字节IO流对应,它读入和写出的数据是以字符为单位的。
1.1 文件字符输入流
1.1.1 构造方法
FileReader(String filename);
FileReader(File filename);
1.1.2 其他方法
int read(); 等。
1.1.3 使用示例
/**
* 文件字符输入流
*/
public class FileReaderStudy {
public static void main(String[] args) throws IOException {
FileReader reader = new FileReader(new File("麻子.txt"));
int n;
while ((n=reader.read())!=-1){
System.out.print((char)n);
}
}
}
1.2 文件字符输出流
1.2.1 构造方法
FileWriter(String filename);
FileWriter(File filename);
FileWriter(String filename,boolean append);
FileWriter(File filename,boolean append);
如果append为true,则将字节写入文件末尾处,相当于追加信息,反之则写在开头。
1.2.2 其他方法
然后使用write(String str);方法进行写出。
1.2.3 使用实例
/**
* 文件字符输出流
*/
public class FileWriterStudy {
public static void main(String[] args) throws IOException {
FileWriter writer = new FileWriter(new File("四郎.txt"));
writer.write("我爱麻子。。");
writer.flush();
}
}
2.缓冲字符IO流
缓冲流增强了读写文件的能力。
它的好处在于我们可以用它来有效率的读写文件。
BufferedReader和BufferedWriter类创建的对象称为缓冲输入流,缓冲输出流,缓冲流支持mark,它是普通字符输入流的一种增强。
2.1.缓冲字符输入流
2.1.1 构造方法
BufferedReader(Reader in);
2.1.2 其他方法
BufferReader流能够通过调用readLine();读取文本行。
2.1.3 使用实例
我们可以通过向BufferedReader传递一个Reader子类的对象来创建一个BufferReader对象,如:
缓冲输入流使用方法:
public class BufferedReaderStudy {
public static void main(String[] args) throws IOException {
FileReader fileReader = new FileReader("麻子.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
while (true){
String str = bufferedReader.readLine();
if(str==null){
break;
}
System.out.println(str);
}
}
}
2.2 缓存字符输出流
2.1.1 构造方法
BufferedWriter(Writer in);
2.1.2 其他方法
BufferedWriter流能够通过调用write(String str);写入文本行。
注意: 记得调用flush写入磁盘。
2.1.3 使用实例
public class BufferedWriterStudy {
public static void main(String[] args) throws IOException {
BufferedWriter writer = new BufferedWriter(new FileWriter("四郎.txt"));
writer.write("我是四郎,我爱麻子");
writer.flush();
}
}
代码地址:
Java基础学习/src/main/java/Progress/exa23 · 严家豆/Study - 码云 - 开源中国 (gitee.com)