通过学习以上的几种流,咱们也能够拓展尝试做下文件的复制:
创立包: cn.tedu.out
创立类: TestCopyFile.java
package cn.tedu.out;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
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.InputStream;
import java.io.OutputStream;
import java.io.Reader;
import java.io.Writer;
import java.util.Scanner;
/**

  • 本类用于测试文件复制
  • 需要: 接管用户输出的文件门路来进行复制,复制到用户指定的门路下
  • */

public class TestCopyFile {

public static void main(String[] args) {    //1.提醒并接管用户输出的要复制的源文件门路--复制啥    System.out.println("请输出源文件门路:");    //导包的快捷键:Ctrl+Shift+O  接管返回值:Alt+Shift+L    String f = new Scanner(System.in).nextLine();        //2.提醒并接管用户输出的指标文件所在的地位--复制到哪    System.out.println("请输出指标文件的门路:");    String t = new Scanner(System.in).nextLine();            //3.1依据源文件门路封装from文件对象    File from = new File(f);    //3.2依据指标文件门路封装to文件对象    File to = new File(t);    //3.3依据用户提供的门路实现文件的复制操作    //自定义复制文件的办法--字符流--只能操作字符相干文件    //ZFcopy(from,to);    //自定义复制文件的办法--字节流--操作啥都行    ZJcopy(from,to);}public static void ZJcopy(File from, File to) {    InputStream in = null;//[PayPal下载](https://www.gendan5.com/wallet/PayPal.html)定义在整个办法中都失效的字节输出流对象,留神是局部变量,须要初始化,对象的默认值是null    OutputStream out = null;//定义在整个办法中都失效的字节输入流对象,留神是局部变量,须要初始化,对象的默认值是null    try {        //1.读取from文件--操作文件的是字节输出流        in = new BufferedInputStream(new FileInputStream(from));        //2.写出到to文件--操作文件的是字节输入流        out = new BufferedOutputStream(new FileOutputStream(to));        //3.边读边写        int b = 0;//定义变量b,记录读取到的数据        while( (b=in.read()) != -1 ) {//只有没有数据时,才返回-1,跳出循环,读写完结            out.write(b);//将读到的数据写出到文件        }        System.out.println("祝贺您!文件复制胜利!");    } catch (IOException e) {        System.out.println("很道歉!文件复制失败!");        e.printStackTrace();//打印错误信息    }finally {        //开释资源        try {            out.close();        } catch (IOException e) {            e.printStackTrace();        }        try {            in.close();        } catch (IOException e) {            e.printStackTrace();        }    }}public static void ZFcopy(File from, File to) {//字符流操作    Reader in = null ;//定义在整个办法中都失效的字符输出流对象,留神是局部变量,须要初始化,对象的默认值是null    Writer out = null;//定义在整个办法中都失效的字符输入流对象,留神是局部变量,须要初始化,对象的默认值是null    try {        //1.读取from文件--获取字符流输出对象        in = new BufferedReader(new FileReader(from));        //2.写出到to文件中--获取字符流输入对象        out = new BufferedWriter(new FileWriter(to));        //3.边读边写        int b = 0;//定义变量,保留读到的数据        while( (b = in.read()) != -1 ) {//当没有数据时,返回-1,读取循环完结            out.write(b);//将本轮循环读取到的内容写出        }        System.out.println("祝贺您!文件复制实现!");    } catch (IOException e) {        System.out.println("很道歉!文件复制失败!");        e.printStackTrace();//失常打印报错信息    }finally {//finally是try-catch构造中肯定会执行的局部,也就是如果有必须执行到的代码,能够写在这        /**         * 1.流资源必须开释,开释的是之前应用过程中所有流对象         * 2.关流是有程序的,留神,后呈现的流先开释,为了不影响代码         * */        //4.开释资源        try {//用来敞开字符输入流            out.close();        } catch (IOException e) {            e.printStackTrace();        }        try {//用来敞开字符输出流            in.close();        } catch (IOException e) {            e.printStackTrace();        }    }}

}