Java使用字节型文件流完成文件夹的复制(递归)

Java使用字节型文件流完成文件夹的复制(递归)

对于程序而言,文件夹的深度是不可预知的,因此想要对其进行删除、复制粘贴、加密解密等等操作,都需要使用递归。
这里仅仅演示文件夹的复制粘贴。(复制单个文件肯定也是没问题的)
演示:将E:\test\dirc复制到F:\test路径下。
在这里插入图片描述
在这里插入图片描述
程序代码:

package com.rjxy;

import java.io.*;

public class FileSuperCopy {
    public void superCopy(String path,String objPath){
        File file = new File(path);
        String oldFileName = file.getName();//获取要复制的文件夹名称或文件名称
        String newFilePath = objPath+"\\"+oldFileName;
        File objFile = new File(newFilePath);
        File[] lists = file.listFiles();
        if (lists!=null){
            //说明它是一个文件夹
            //例如:E:\test\dirc
            objFile.mkdir();//在目标路径创建好空的文件夹
            System.out.println(objFile.getName()+">文件夹复制成功");
            if (lists.length!=0){
                for(File f:lists){
                    superCopy(f.getAbsolutePath(),objFile.getAbsolutePath());
                }
            }
        }else{
            //说明它是一个文件
            FileInputStream fis = null;
            FileOutputStream fos = null;
            try {
                fis = new FileInputStream(file);
                fos = new FileOutputStream(objFile);
                byte[] bytes = new byte[1024];
                int count = fis.read(bytes);
                while (count!=-1){
                    fos.write(bytes,0,count);
                    fos.flush();
                    count = fis.read(bytes);
                }
                System.out.println(objFile.getName()+">文件复制成功!");
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if (fis!=null) {
                        fis.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if (fos!=null) {
                        fos.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static void main(String[] args) {
        FileSuperCopy fsc = new FileSuperCopy();
        String oldPath = "E:\\test\\dirc";
        String newPath = "F:\\test";
        fsc.superCopy(oldPath,newPath);
    }
}

打印日志:

dirc>文件夹复制成功
aaa>文件夹复制成功
innera>文件夹复制成功
innera.txt>文件复制成功!
innerinnera>文件夹复制成功
innerinnera.txt>文件复制成功!
inneraa>文件夹复制成功
inneraa.txt>文件复制成功!
inneraaa>文件夹复制成功
bbb>文件夹复制成功
b>文件夹复制成功
1.txt>文件复制成功!
2.txt>文件复制成功!
bb>文件夹复制成功
11.txt>文件复制成功!
22.txt>文件复制成功!
bbb>文件夹复制成功
ccc>文件夹复制成功
cc.txt>文件复制成功!
innerc>文件夹复制成功
c.txt>文件复制成功!
cc.txt>文件复制成功!
ccc.txt>文件复制成功!

结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43598138/article/details/105718417