JavaSE:复制文件夹内所有文件到其他位置(File+递归)

package com.itheima.d1_fileClone;

import java.io.*;

public class DirectoryCopy {
    public static void main(String[] args) throws Exception {
        copyDirectory(new File("F:\\one"),new File("G:\\"));
    }
    public static void copyDirectory(File oriFile, File newFile) throws Exception {
        //先找到文件目录:有这个目录,不是空的
        if (oriFile!=null && oriFile.isDirectory()){
            //目标位置,创建目录
            File newPath = new File(newFile,oriFile.getName());
            newPath.mkdirs();
            //得到目录下的所有文件
            File[] files = oriFile.listFiles();
            //先判断文件是不是空的,再遍历文件
            if (files!=null){
                for (File fileEach:files){
                    if (fileEach.isFile()){
                        copyFile(fileEach,new File(newPath,fileEach.getName()));
                    }else {
                        copyDirectory(fileEach,newPath);
                    }
                    //文件如果是 文件类型就复制,文件夹就递归
                }
            }


        }
        else {
            System.out.println("没有这个文件夹,路径错误!");
        }



    }
    public static void copyFile(File InpFile,File OutFile) throws Exception {
        //单纯复制文件
        OutputStream os = new FileOutputStream(OutFile);
        InputStream is = new FileInputStream(InpFile);
        //得到两个流:输入输出
        byte[] buffer = new byte[1024];
        while (is.read(buffer)!=-1){
            os.write(buffer);
        }
        System.out.println("该文件复制完毕");
        //while复制
        os.close();
        is.close();
        //复制完了就关了is 和 os
    }
}

两个函数:一个得到原始目录下所有文件并遍历,判断是文件就调用文件复制的函数复制,不是文件(文件夹),就需要递归。另外一个就是文件复制函数。

我自己写的时候while (is.read(buffer)!=-1)这一行写成了while (is.read(buffer)!=0)效果直接反了,结果就是复制的第一个文件就特别大,打不开。

所以我搜了字节输入流的read函数:

意思就是读到底了就会返回-1

没事查查文档确实很重要,就写到这里

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值