java实现文件夹的复制和文件的复制

//复制到特定目录下
    public void copyFiles(File rootFile,File copyFile){
        //如果目标目录是一个文件,则抛出不可复制到文件的异常
        if(copyFile.isFile()){
            throw new RuntimeException("不能将一个文件夹复制到一个文件当中");
        }
        //因为是复制所以,要保证复制后的文件夹和原文件夹的名字包括里面的子文件夹,子文件名字都保持一致
        String rootPath=rootFile.getAbsolutePath().substring(rootFile.getAbsolutePath().lastIndexOf('\\'));
        //因此,新文件创建的时候,直接截取原文件的路径获取文件名字整合到目标文件夹的后面形成目标文件的路径
        String path=copyFile.getAbsolutePath()+rootPath;
        copyFile=new File(path);
        //如果复制的当前元素是文件,用流操作进行复制
        if(rootFile.isFile()){
            try {
                FileInputStream fis=new FileInputStream(rootFile);
                FileOutputStream fos=new FileOutputStream(copyFile);
                byte[] b=new byte[1024];
                int code;
                code = fis.read(b);
                while(code!=-1){
                    fos.write(b, 0, code); 
                    code=fis.read(b);
                }
                fos.flush();
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }else{//如果当前file对象指代的是文件夹,那么直接创建一个空文件夹即可
            copyFile.mkdir();
            File[] files=rootFile.listFiles();
            //如果文件夹下面再有子元素,则递归循环复制
            if(files.length!=0){
                for(File f:files){
                    this.copyFiles(f, copyFile);
                }

            }

        }
    }

测试用例:

File f1=new File("F:\\测试\\a\\haha.txt");//构建原文件对象
//或者构建文件夹对象,同样可以实现文件夹的复制
        File f2=new File("E:\\练习");//目标文件夹
       CopyFile cf=new CopyFile();
       cf.copyFiles(f1,f2);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值