Java中递归复制文件夹及文件(简易版)

Posted cn-dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中递归复制文件夹及文件(简易版)相关的知识,希望对你有一定的参考价值。


递归调用copyDir方法实现,查询源文件目录使用字节输入流写入字节数组,如果目标文件目录没有就创建目录,如果迭代出是文件夹使用字节输出流对拷文件,直至源文件目录没有内容。



  

   /**
     *  复制文件夹
     * @param srcDir 源文件目录
     * @param destDir 目标文件目录
     */
    public static void copyDir(String srcDir, String destDir) {
        if (srcRoot == null) srcRoot = srcDir;
        //源文件夹
        File srcFile = new File(srcDir);
        //目标文件夹
        File destFile = new File(destDir);
        //判断srcFile有效性
        if (srcFile == null || !srcFile.exists())
            return;
        //创建目标文件夹
        if (!destFile.exists())
            destFile.mkdirs();
        //判断是否是文件
        if (srcFile.isFile()) {
            //源文件的绝对路径
            String absPath = srcFile.getAbsolutePath();
            //取出上级目录
            String parentDir = new File(srcRoot).getParent();
            //拷贝文件
            copyFile(srcFile.getAbsolutePath(), destDir);

        } else {    //如果是目录
            File[] children = srcFile.listFiles();
            if (children != null) {
                for (File f : children) {
                    copyDir(f.getAbsolutePath(), destDir);
                }
            }
        }
    }

 




   /**
     * 复制文件夹
     *
     * @param path    路径
     * @param destDir 目录
     */
    public static void copyFile(String path, String destDir) {

        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
             /*
                准备目录
                取出相对的路径
                创建目标文件所在的文件目录
             */
            String tmp = path.substring(srcRoot.length());
            String folder = new File(destDir, tmp).getParentFile().getAbsolutePath();
            File destFolder = new File(folder);
            destFolder.mkdirs();
            System.out.println(folder);            //创建文件输入流
            fis = new FileInputStream(path);
            //定义新路径
            //创建文件 输出流
            fos = new FileOutputStream(new File(destFolder,new File(path).getName()));
            //创建字节数组进行流对拷
            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = fis.read(buf)) != -1) {
                fos.write(buf, 0, len);
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
            try {
                fis.close();
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

 

 

 

以上是关于Java中递归复制文件夹及文件(简易版)的主要内容,如果未能解决你的问题,请参考以下文章

Android简易音乐重构MVVM Java版-新增推荐菜单及侧边栏展示

Java 递归遍历文件夹及子文件夹中文件

Java 递归遍历文件夹及子文件夹中文件

Android简易音乐重构MVVM Java版-新增推荐雷达歌单及重构首页(十三)

Android简易音乐重构MVVM Java版-解决播放界面旋转动画卡顿及播放异常崩溃问题(二十一)

Android简易音乐重构MVVM Java版-解决播放界面旋转动画卡顿及播放异常崩溃问题(二十一)