欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java基础知识之将源目标中的所有文件拷贝到另一个文件当中

程序员文章站 2022-06-16 13:50:12
...
import java.io.*;

/**
 * 将F:\学校文档\编程语言中的所有文件复制到D:\a\b\c\test
 */
public class CopyAll {
    public static void main(String[] args) {
        // 拷贝源
        File srcFile=new File("F:\\学校文档\\编程语言");
        // 拷贝目标
        File destFile=new File("D:\\a\\b\\c\\test");
        System.out.println(destFile.getAbsolutePath());//D:\a\b\c\test
        // 调用方法拷贝
       copyDir(srcFile,destFile);
    }

    /**
     * 拷贝目录
     * @param srcFile 拷贝源
     * @param destFile  拷贝目标
     */
    private static void copyDir(File srcFile, File destFile) {
        // srcFile如果是一个文件的话,递归结束。
        // 是文件的时候需要拷贝。
        // ....一边读一边写。
        if(srcFile.isFile()){
        FileInputStream fis=null;
        FileOutputStream fos=null;

        try {
            // 读源文件 F:\学校文档\编程语言
            fis=new FileInputStream(srcFile);
            //判断目标文件D:\a\b\c\test的绝对路径是否以\结尾
            //如果是则直接将源文件的绝对路径F:\去掉加到目标路径D:\a\b\c\test之后
            //变成新的绝对路径D:\a\b\c\test\学校文档\编程语言
            //如果不是以\结尾则加上\在执行以上操作
            String path=(destFile.getAbsolutePath().endsWith("\\")?destFile.getAbsolutePath():destFile.getAbsolutePath()+"\\")
                    +srcFile.getAbsolutePath().substring(3);
            // 将新的目标文件绝对路径path写入
            fos=new FileOutputStream(path);
            // 一边读一边写 一次读1MB
            byte[] bytes=new byte[1024*1024];
            int readCount=0;
            while((readCount=fis.read(bytes))!=-1){
                fos.write(bytes,0,readCount);
            }

            fos.flush();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(fis!=null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return;
        }


        //代码执行到此处说明srcFile是一个目录则获取源目录下面的子目录
        File[] files=srcFile.listFiles();
        for (File f:files) {
            if(f.isDirectory()){
                //获取子目录的绝对路径
                String srcDir=f.getAbsolutePath();
                String desDir=(destFile.getAbsolutePath().endsWith("\\")?destFile.getAbsolutePath():destFile.getAbsolutePath()+"\\")
                        +srcDir.substring(3);

                //新建对应目录
                File newFile=new File(desDir);
                if(!newFile.exists()){
                    newFile.mkdirs();
                }
            }
            //递归调用
            copyDir(f,destFile);
        }
    }
}