实现文件拷贝的程序

版权声明:嘻嘻嘻嘻,I see you https://blog.csdn.net/qq_38317309/article/details/86308193

希望利用程序来实现文件的拷贝。通过初始化参数接收源文件和目标文件的路径,完成拷贝方法。实现:实现数据拷贝需要通过流 字节流比较合适。在进行拷贝的过程中 在程序中开辟一个数组,这个数组的长度为文件的长度,将所有的数据一次性读取到该数组中,随后将该数组进行输出。应该采用边读、边写的方式来完成。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;/**

  • 建立一个专门负责拷贝的类 其目标是
  • 1、检验源文件是否存在
  • 2、需要判断目标文件的父路径是不是存在,不存在则创建一个
  • 3、完成文件拷贝的操作
    /
    class CopyUtil{// 建议 因为类不需要保存任何的属性,所以建议将该类的构造方法私有化,使用static 方法
    private CopyUtil() {}
    /
    *
  • 写方法的过程时候采用这种方法写注释,可以为了方便以后知道这个方法时用来干什么的
  • @param path是输入源文件的路径
  • @return 如果该文件源文件存在,则返回一个true,否则返回false
    /
    public static boolean fileExists(String path) {//用来判断该源文件是否存在,即目标1
    return new File(path).exists();
    }
    /
    *
  • 根据其传入的路径来判断父路径是否存在,如果不存在则创建
  • @param path 是要操作的路径,通过该路径取得其父路径
    /
    public static void creatParentDir(String path) {
    File file=new File(path);
    if(!file.getParentFile().exists()) {//路径假如不存在,则创建父路径
    file.getParentFile().mkdir();//创建一个父路径
    }
    }
    /
    *
  • 实现文件拷贝的处理
  • @param srcPath源文件路径
  • @param desPath目标文件路径
  • @return 拷贝完成返回true,否则返回false
    /
    public static boolean copy(String srcPath,String desPath){
    boolean flag=false;
    File inFile=new File(srcPath);
    File outFile=new File(desPath);
    InputStream input =null;
    OutputStream output =null;
    try{
    input=new FileInputStream(inFile);
    output=new FileOutputStream(outFile);
    copyHandle(input, output);//完成具体的拷贝处理
    flag=true;//如果没有异常,则一定会执行到这条语句。
    }
    catch(Exception e){
    flag=false;
    }finally {
    try {
    input.close();
    output.close();
    }
    catch (IOException e) {}
    }
    return flag;
    }
    /
    *
  • 实现具体的文件拷贝操作
  • @param input 输入流对象
  • @param output 输出流对象
    */
    private static void copyHandle(InputStream input,OutputStream output)throws IOException {
    //InputStram 有一个读取单个字节的做法 int read();
    //OutputStram 有一个输出单个字节的做法 int write(int data);
    long start=System.currentTimeMillis();
    int temp=0;
    // do {
    // temp=input.read();
    // output.write(temp);
    // }while(temp!=-1);//如果有数据则一直读取,直到读完所有的数据为止
    byte data[]=new byte [2048];

while((temp=input.read())!=-1){//表示读取输入流的一个字节,再判断读取后的字节(保存在temp 中)是否为-1,
output.write(data,0,temp);//以上的方法针对的还是一个字节。但是为了加速,需要开辟一个字节数组。
}
long end=System.currentTimeMillis();
System.out.println(“拷贝共用时”+(end-start)+“毫秒”);
}
}
public class CopyTest { public static void main(String[] args) {
if(args.length!=2) {//现在的参数不是2
System.out.println(“错误的执行方式、命令调用:Java copy源文件路径 目标文件路径”);
System.exit(1);//系统退出
}
if(CopyUtil.fileExists(args[0])) {// 判断源文件是否存在?
CopyUtil.creatParentDir(args[1]);//创建目标的父目录
System.out.println(CopyUtil.copy(args[0], args[1]) ? “文件拷贝成功”:“文件拷贝失败”);
}else {
System.out.println(“对不起 源文件不存在”);
}
}
}
如果数据要求在InputSream需要输出,就采用以上的模型。

猜你喜欢

转载自blog.csdn.net/qq_38317309/article/details/86308193