经过学习以上的几种流,咱们也能够拓展尝试作下文件的复制:
建立包: 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;
/**html
public class TestCopyFile {java
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(); } } }
}学习