io流(文件字符流(FileReader,FileWriter文件的复制))


文件字符流(FileReader,FileWriter文件的复制)

  • 文件的复制

    1. 效率低的方法

    注意:字符流需要刷新操作,字节流不需要,只有刷新后才可以将程序中的内容导入到目标文件中

package com.bjsxt.test03;

import java.io.*;

public class Test {
    public static void main(String[] args) throws IOException {
        //1.确定源文件
        File f1 = new File("D:\\a\\b.txt");
        //2.确定目标文件
        File f2 = new File("D:\\a\\a.txt");
        //3.一根管插入源文件中
        FileReader fr = new FileReader(f1);
        //4.一根管插入目标文件中
        FileWriter fw = new FileWriter(f2);
        //5.开始动作
        int n = fr.read();
        while(n!=-1){
            fw.write(n);//这里写出的内容都是数字,因为n是int类型,不过可以强转为char类型
            n=fr.read();
        }
        //6.关闭流
        fw.close();
        fr.close();
        //fw.flush();   也可以这样,如果你写的是关闭流,那么底层自动帮你做了flush的动作
    }
}
  1. 效率高的方法(还是利用缓冲数组加快读取速度)
package com.bjsxt.test03;

import java.io.*;

public class Test02 {
    public static void main(String[] args) throws IOException {
        //1.确定源文件
        File f1 = new File("D:\\a\\b.txt");
        //2.确定目标文件
        File f2 = new File("D:\\a\\a.txt");
        //3.一根管插入源文件中
        FileReader fr = new FileReader(f1);
        //4.一根管插入目标文件中
        FileWriter fw = new FileWriter(f2);
        //5.开始动作
        char[] ch = new char[4];
        int len = fr.read(ch);
        while(len!=-1){
            fw.write(ch,0,len);
            len=fr.read(ch);
        }
        //6.关闭流
        fw.close();
        fr.close();
        //fw.flush();   也可以这样,如果你写的是关闭流,那么底层自动帮你做了flush的动作
    }
}
  1. 处理异常的方式(自己捕获)
package com.bjsxt.test03;

import java.io.*;

public class Test03 {
    public static void main(String[] args){
        //1.确定源文件
        File f1 = new File("D:\\a\\b.txt");
        //2.确定目标文件
        File f2 = new File("D:\\a\\a.txt");
        //3.一根管插入源文件中
        FileReader fr = null;
        FileWriter fw =null;
        try {
            fr = new FileReader(f1);
            //4.一根管插入目标文件中
            fw = new FileWriter(f2);
            //5.开始动作
            char[] ch = new char[4];
            int len = fr.read(ch);
            while(len!=-1){
                fw.write(ch,0,len);
                len=fr.read(ch);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {//自己捕获的异常
            e.printStackTrace();
        } finally {
            //6.关闭流
            try {
                fw.close();
            } catch (IOException e) {//自己捕获的异常
                e.printStackTrace();
            }
            try {
                fr.close();
            } catch (IOException e) {//自己捕获的异常
                e.printStackTrace();
            }
            //不把他两放在一个异常的原因是:如果上面那个有问题,那么下面的io流就不会被关闭
            //fw.flush();   也可以这样,如果你写的是关闭流,那么底层自动帮你做了flush的动作
        }
    }
}