文件拷贝

文件拷贝

linux下文件拷贝命令:"cp 源文件路径 目标文件路径"

现在希望通过程序来实现这样的操作,即:建立一个copyFile程序类,这个类通过初始化参数接收源文件与目标文 件路径。

分析:

  1. 要想实现数据的拷贝肯定是要通过流的方式来完成,对于流有两类,由于要拷贝的内容不一定是文字数据,所以此处我们采用字节流。
  2. 在进行拷贝的时候需要确定模式:a.在程序中开辟一个数组,该数组长度为文件长度,将所有数据一次性读取到该数组中随后进行输出保存。b.采用同边读边写的方式完成。
package www.bit.FileTest;

import java.io.*;

/**
 * 建立一个专门负责文件拷贝处理的类,该类具备如下功能:
 *  1.判断拷贝的源文件是否存在
 *  2.判断目标文件的父路径是否存在,如果不存在则创建父目录
 *  3.进行文件拷贝的处理
 */
class CopyFileUtil {
    // 此时这个工具类不需要任何属性,
    // 建议将构造方法私有化,并且文件操作方法均为类方法
    private CopyFileUtil(){}

    /**
     * 判断要拷贝的源文件路径是否存在
     * @param sourceFilePath 输入的源路径信息
     * @return  如果该路径真实存在返回true,否则返回false
     */
    public static boolean sourceFilePathIsExists(String sourceFilePath){
        return new File(sourceFilePath).exists();
    }

    /**
     * 根据传入的目标文件路径判断其父路径是否存在,如果不存在则创建
     * @param destFilePath  输出的目标文件地址,根据此地址判断父路径是否存在。不存在则创建
     */
    public static void destFilePathExists(String destFilePath){
        File file = new File(destFilePath);
        if (!file.getParentFile().exists()){
            file.getParentFile().mkdirs();
        }
    }
    /**
     * 文件拷贝
     * @param sourceFilePath 源文件绝对路径
     * @param destFilePath 目标文件绝对路径
     * @return  是否拷贝成功
     * @throws Exception
     */
    public static boolean copyFile(String sourceFilePath,String destFilePath) throws Exception{
        File sourceFile = new File(sourceFilePath);
        File destFile = new File(destFilePath);
        InputStream inputStream = new FileInputStream(sourceFile);
        OutputStream outputStream = new FileOutputStream(destFile);
        long startTime = System.currentTimeMillis();
        copyFileHandle(inputStream,outputStream);
        long endTime = System.currentTimeMillis();
        System.out.println("文件拷贝结束,共耗时" + (endTime-startTime) + "毫秒");
        return true;
    }

    /**
     * 实现具体的文件拷贝操作
     * @param inputStream  输入流对象
     * @param outputStream 输出流对象
     * @throws Exception
     */
    private static void copyFileHandle(InputStream inputStream,
                                       OutputStream outputStream)throws Exception{
        int len = 0;
        byte[] data = new byte[1024]; // 开辟缓冲区一次性读入多个内容
        while ((len = inputStream.read(data)) != -1){ // 表示将数据读取到字节数组之中,而后返回读取个数
            outputStream.write(data,0,len); // 将字节数组的部分内容写到目标文件中
        }
        inputStream.close();
        outputStream.close();
    }
}
public class CopyFile {
    public static void main(String[] args) throws Exception {
        if (args.length != 2){
            System.out.println("非法操作,命令为: java CopyFile 源文件路径 目标文件路径");
            return;
        }
        String sourceFilePath = args[0]; // 取得源文件路径
        String destFilePath = args[1]; // 取得目标路径
        if (CopyFileUtil.sourceFilePathIsExists(sourceFilePath)){
            CopyFileUtil.destFilePathExists(destFilePath);
            System.out.println(CopyFileUtil.copyFile(sourceFilePath,destFilePath)
                ? "文件拷贝成功" : "文件拷贝失败");
        }else {
            System.out.println("源文件不存在,无法进行拷贝");
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章