1.字符流的学习(FileReader与FileWriter):字符流是可以直接读写字符的IO流(只读或者只写时使用字符流)
(1)字符流读取字符就要先读取到字节数据,然后转化为字符;如果要写出字符,需要把字符转化为字节再写出
(2)读取的时候是按照字符的大小读取的,不会出现半个中文;写出的时候,直接将字符串写出,没有转换动作
(3)字符流不可以拷贝非纯文本文件
(4)流对象尽量晚开早关
2.字符流常见的读写
3.字符流的拷贝
4.自定义字符数组的拷贝
5.带缓冲的字符流的拷贝
6.使用缓冲的字符流readLine()方法(返回的是String)和newLine()方法拷贝
7.将文本反转(将一个文本文档的第一行和倒数第一行交换,以此类推)
8.LineNumberReader,是BufferedReader的子类,具有相同的功能,并且可以统计行号
(1)setLineNumber(int)设置行号
(2)getLineNumber()获得行号
9.如何使用指定的码表读写字符(对不同的码表进行处理的步骤)
(1)InputStreamReader和OutputStreamWriter是字节流通向字符流的桥梁
10.装饰设计模式(这样子处理,耦合性没有那么强)
(1)获取被装饰的类引用
(2)构造方法中传入对象
(3)对原有功能进行升级
package pra_17;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
public class J_34 {
public static void main(String[] args) throws IOException {
//1.常见的读写
FileReader fr=new FileReader("aaa.txt");
FileWriter fw=new FileWriter("bbb.txt",true); //往里写不清空
int x;
while((x=fr.read())!=-1){
System.out.println((char)x);
}
fw.write("你不是一个大帅哥!"); //无论是读出来还是写出去,都是使用默认的码表实现
fr.close();
fw.close();
//2.字符流的拷贝
FileReader fr1=new FileReader("aaa.txt");
FileWriter fw1=new FileWriter("zzz.txt");
int y;
while((y=fr1.read())!=-1){
fw1.write(y);
}
fr1.close();
fw1.close(); //Writer类中有一个2k的小缓冲区,关流才会将字符写出后才关闭流
//3.自定义字符数组的拷贝
FileReader fr2=new FileReader("aaa.txt");
FileWriter fw2=new FileWriter("yyy.txt");
char[] arr=new char[1024];
int len;
while((len=fr2.read(arr))!=-1){
fw2.write(arr,0,len);
}
fr2.close();
fw2.close();
//4.带缓冲的字符流的拷贝
BufferedReader br=new BufferedReader(new FileReader("aaa.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("xxx.txt"));
int c;
while((c=br.read())!=-1){ //直接将缓冲区的内容读入
bw.write(c);
}
br.close();
bw.close();
//5.使用缓冲的字符流readLine()方法(返回的是String)和newLine()方法拷贝
BufferedReader br2=new BufferedReader(new FileReader("aaa.txt"));
BufferedWriter bw2=new BufferedWriter(new FileWriter("qqq.txt"));
String line;
while((line=br2.readLine())!=null){
bw2.write(line);
bw2.newLine(); //写出回车换行符,与"\r\n"的区别在于newLine()是跨平台的方法。
}
br2.close();
bw2.close();
//6.将文本反转
BufferedReader br3=new BufferedReader(new FileReader("aaa.txt"));
BufferedWriter bw3=new BufferedWriter(new FileWriter("abccba.txt"));
ArrayList<String> list=new ArrayList<>();
String line2;
while((line2=br3.readLine())!=null){
list.add(line2);
}
for (int i=list.size()-1;i>=0;i--) {
bw3.write(list.get(i));
bw3.newLine();
}
br3.close();
bw3.close();
//7.LineNumberReader具有相同的功能,并且可以统计行号
LineNumberReader lnr=new LineNumberReader(new FileReader("aaa.txt"));
String line3;
lnr.setLineNumber(0); //从第0+1行开始
while((line3=lnr.readLine())!=null){
System.out.println(lnr.getLineNumber());
}
//8.使用指定的码表读写字符
//FileReader fr3=new FileReader("utf8.txt"); //用默认编码表读取文件
//FileWriter fw3=new FileWriter("gbk.txt"); //用默认编码表写出文件
//使用指定的utf-8码表
InputStreamReader isr=new InputStreamReader(new FileInputStream("utf8.txt"),"utf-8");//指定码表读取字符
OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("gbk.txt"),"gbk");//指定码表写入字符
int c2;
while((c2=isr.read())!=-1){
osw.write(c2);
}
isr.close();
osw.close();
//相比上面一个,更高效的读写
BufferedReader br4=new BufferedReader(new InputStreamReader(new FileInputStream("utf8.txt"),"utf-8"));
BufferedWriter bw4=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("gbk2.txt"),"gbk"));
int c3;
while((c3=br4.read())!=-1){
bw4.write(c3);
}
br4.close();
bw4.close();
}
}
装饰设计模式的例子
package pra_17;
public class J_35 {
public static void main(String[] args) {
Fac fac=new Fac(new Tag());
fac.ck();
}
}
interface Ck{
public void ck();
}
class Tag implements Ck{
@Override
public void ck() {
System.out.println("this is ck");
System.out.println("this is ck2");
}
}
class Fac implements Ck{
private Ck ck; //获取被装饰类Ck的引用
public Fac(Ck ck){ //构造方法中传入对象
this.ck=ck;
}
@Override
public void ck() { //对原有功能进行升级
ck.ck();
System.out.println("this is ck3");
System.out.println("this is ck4");
}
}