一.字符流
1.字符流是什么
字符流是可以直接读写字符的IO流
字节流只能读写字节.如果要读取字符,就要先读取到字节数据,然后转为字符.如果要写出字符,需要把字符转为字节再写出.
2.FileReader,FileWriter
FileReader类的read()方法可以按照字符大小读取
1、循环读出里面的字符
FileReader fr =new FileReader("aaa.txt");
int ch;
while((ch = fr.read())!=-1){
System.out.print((char)ch);
}
fr.close();
FileWriter fw = new FileWriter("bbb.txt");
fw.write("fighting,努力,123,%%^&");
fw.close();
;
FileWriter类的write()方法可以自动把字符转为字节写出
实现读写操作:
方式一
FileReader fr = new FileReader("aaa.txt");
FileWriter fw = new FileWriter("bbb.txt");
int ch;
while ((ch = fr.read())!=-1){
fw.write(ch);
}
fr.close();
fw.close();
方式二
FileReader fr = new FileReader("day21笔记.txt");
FileWriter fw = new FileWriter("copy.txt");
char [] arr = new char[1024];
int len;
while((len = fr.read(arr))!=-1){
fw.write(arr,0,len);
方式三
BufferedReader br = new BufferedReader(new FileReader("day21笔记.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("copy.txt"));
int len;
while((len = br.read())!=-1){
bw.write(len);
}
br.close();
bw.close();
3.什么情况下使用字符流
字符流也可以拷贝文本文件,但不推荐使用.因为读取时会把字节转为字符,写出时还要把字符转回字节.(拷贝文件的时候建议使用字节流)
字符流作用:
1、只读因为通过编码表按照一个字符一个字符的读取,不会出现半个中文。
2、只写可以直接写出字符串
程序需要读取一段文本,或者需要写出一段文本的时候可以使用字符流
4.带缓冲的字符流
BufferedReader的read()方法读取字符时会一次读取若干字符到缓冲区,然后逐个返回给程序,降低读取文件的次数,提高效率
BufferedWriter的write()方法写出字符时会先写到缓冲区,缓冲区写满时才会写到文件,降低写文件的次数,提高效率
写满空间的时候调用flush()方法,close()关闭流之前调用flash刷新剩下的数据;
BufferedReader的readLine()方法可以读取一行字符(不包含换行符号)
BufferedWriter的newLine()可以输出一个跨平台的换行符号"\r\n"
BufferedReader br = new BufferedReader(new FileReader("day21笔记.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("copy.txt"));
String str;
while((str = br.readLine())!=null){
bw.write(str);
//bw.write("\r\n");
bw.newLine();
}
5.LineNumberReader
LineNumberReader是BufferedReader的子类,具有相同的功能,并且可以统计行号
调用getLineNumber()方法可以获取当前行号
调用setLineNumber()方法可以设置当前行号
6.使用指定的码表读取字符
FileReader是使用默认码表读取文件,如果需要使用指定码表读取,那么可以使用InputStreamReader(字节流,编码表)
FileWriter是使用默认码表写出文件,如果需要使用指定码表写出,那么可以使用OutputStreamWriter(字节流,编码表)
二.今日重点
1.会用BufferedReader读取GBK码表和UTF-8码表的字符
2.会用BufferedWriter写出字符到GBK码表和UTF-8码表的文件中
3.会使用BufferedReader从键盘读取一行
4.会用字节数组拷贝文件,会用BufferedInputStream和BufferedOutputStream拷贝文件
flush 和close的区别
1、flash方法可以将缓冲区的数据刷到文件上,调用之后还可以继续调用写的方法
2、close方法可以关闭流,在关闭流之前会将缓冲区的中的有效字符刷出来,然后在关闭,如果不关闭就不能再调用写的方
使用流对象尽量使晚开早关
* 设计模式之装饰设计模式 //实现包装
*/
public static void main(String[] args) {
Student s = new Student();// 学生类开始有的功能
s.code();
ItcastStudent is = new ItcastStudent(new Student());
is.code(); //学生包装后的功能
}
}
interface Coder {
public void code();
}
class Student implements Coder {
@Override
public void code() {
System.out.println("javase");
System.out.println("javaweb");
}
}
class ItcastStudent implements Coder {
private Student s;
public ItcastStudent(Student s) {
this.s = s;
}
@Override
public void code() {
s.code();
System.out.println("ssh");
System.out.println("安卓");
System.out.println("ios");
System.out.println("数据库");
System.out.println("............");
}
}