IO流递归复制文件夹以及文件夹中的内容---师承刘意老师

package copyfloder;
/*
 * 分析
 *      1.创建目标文件夹
 *      2.判断源文件夹是文件夹还是文件
 *          a,是文件夹在目标文件夹创建新的文件夹在执行2
 *          b,是文件直接将文件复制到目标文件夹
 */

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class MuchCopy
{
    public static void main(String[] args)throws IOException
    {
        //封装源目录
        File srcFloder = new File("e:\\Android");
        //封装目标目录
        File destFloder = new File("e:\\java2");

        //判断目标文件是否存在
        if(!destFloder.exists()){
            destFloder.mkdir();
        }

        fileOrFloder(srcFloder,destFloder);
    }

    private static void fileOrFloder(File srcFloder, File destFloder)throws IOException
    {
        // TODO Auto-generated method stub
        //判断源文件是文件夹还是文件
        if(srcFloder.isDirectory()){
            //创建文件夹的抽象目录
            File newDestFloder = new File(destFloder,srcFloder.getName());
            //调用抽象目录创建文件夹
            newDestFloder.mkdir();

            //获取文件夹中的文件或文件夹
            File[] fileArray = srcFloder.listFiles();
            //因为其为文件夹所以要判断其内容的性质循环判断
            for(File file : fileArray){
                fileOrFloder(file, newDestFloder);
            }
        }else{
            //使用复制文件的方法
            //注意:srcflorder必须问为源文件
            //    destFlorder必须为一个文件一个目标的文件
            File newFile = new File(destFloder,srcFloder.getName());
            copy(srcFloder,newFile);
        }
    }

    private static void copy(File srcFloder, File destFloder)throws IOException
    {
        // TODO Auto-generated method stub
        //字节输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFloder));
        //封装字节输出流
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFloder));

        byte[] bys = new byte[1024];
        int len =0;
        while((len=bis.read(bys))!=-1){
            bos.write(bys,0,len);
        }

        //释放资源
        bis.close();
        bos.close();
    }
}

理解:
存在递归的思想当其中含有文件夹时其操作和根目录相同都是对文件夹复制,但有许多注意事项
文件夹创建理解:

File newfloder = new File(新文件夹目录,文件夹名);
newfloder.mkdir;

指定文件所存目录和文件夹姓名,代码执行完后文件夹就创建完成了
注意:
1,创建新的文件夹后要及时变更新文件夹路径
2,复制是另开一个新的文件夹,里面的文件文件夹的名字,及创建都得手动完成,并在使用前完成。
3,复制文件是注意创建对象,注意文件名问题。
4,执行复制文件函数参数的必须是文件,两个对象都得是文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值