java 第6节 标准流&打印流 161复制多级文件夹

package copydir;

import java.io.*;

/*
    需求:
        把E:\\itcast 这个文件夹复制到模块目录下

    思路:
        1:创建数据源目录File对象,路径是E:\\itcast
        2:获取数据源目录File对象的名称(itcast)
        3:创建目的地目录File对象,路径名是模块名+itcast组成(myCharStream\\itcast)
        4:判断目的地目录对应的File是否存在,如果不存在,就创建
        5:获取数据源目录下所有文件的File数组
        6:遍历File数组,得到每一个File对象,该File对象,其实就是数据源文件
            数据源文件:E:\\itcast\\mn.jpg
        7:获取数据源文件File对象的名称(mn.jpg)
        8:创建目的地文件File对象,路径名是目的地目录+mn.jpg组成(myCharStream\\itcast\\mn.jpg)
        9:复制文件
            由于文件不仅仅是文本文件,还有图片,视频等文件,所以采用字节流复制文件
 */
public class Copyss {
    public static void main(String[] args) throws IOException {
        String f = "D:\\photo";
        File srcDir = new File(f);
        String name = srcDir.getName();
        // System.out.println(name);

        // 创建 目的地对象
        File destDir = new File("stu\\src\\Copp");
        copayDir(srcDir,destDir);
    }

    // 复制文件夹
    private static void copayDir(File srcDir, File destDir) throws IOException {
        // 判断文件是否存在
        if(!destDir.exists()){
            destDir.mkdirs();
        }
        if(srcDir.isDirectory()){
            String srcname = srcDir.getName();;
            File newfolder = new File(destDir,srcname);
            if(!newfolder.exists()){
                newfolder.mkdirs();
            }

            File[] filearray = srcDir.listFiles();

            for (File file:filearray){
                copayDir(file,newfolder);
            }


        }else{
            File newFile = new File(destDir,srcDir.getName());
            CopyFile(srcDir,newFile);
        }
    }

    private static void CopyFile(File srcFile, File destFile) throws IOException {
        // 输入流
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

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

    }
}

注释版 

package com.itheima_08;

import java.io.*;

/*
    需求:
        把“E:\\itcast”复制到 F盘目录下

    思路:
        1:创建数据源File对象,路径是E:\\itcast
        2:创建目的地File对象,路径是F:\\
        3:写方法实现文件夹的复制,参数为数据源File对象和目的地File对象
        4:判断数据源File是否是目录
            是:
                A:在目的地下创建和数据源File名称一样的目录
                B:获取数据源File下所有文件或者目录的File数组
                C:遍历该File数组,得到每一个File对象
                D:把该File作为数据源File对象,递归调用复制文件夹的方法
            不是:说明是文件,直接复制,用字节流
 */
public class CopyFoldersDemo {
    public static void main(String[] args) throws IOException {
        //创建数据源File对象,路径是E:\\itcast
        File srcFile = new File("E:\\itcast");
        //创建目的地File对象,路径是F:\\
        File destFile = new File("F:\\");

        //写方法实现文件夹的复制,参数为数据源File对象和目的地File对象
        copyFolder(srcFile,destFile);
    }

    //复制文件夹
    private static void copyFolder(File srcFile, File destFile) throws IOException {
        //判断数据源File是否是目录
        if(srcFile.isDirectory()) {
            //在目的地下创建和数据源File名称一样的目录
            String srcFileName = srcFile.getName();
            File newFolder = new File(destFile,srcFileName); //F:\\itcast
            if(!newFolder.exists()) {
                newFolder.mkdir();
            }

            //获取数据源File下所有文件或者目录的File数组
            File[] fileArray = srcFile.listFiles();

            //遍历该File数组,得到每一个File对象
            for(File file : fileArray) {
                //把该File作为数据源File对象,递归调用复制文件夹的方法
                copyFolder(file,newFolder);
            }
        } else {
            //说明是文件,直接复制,用字节流
            File newFile = new File(destFile,srcFile.getName());
            copyFile(srcFile,newFile);
        }
    }

    //字节缓冲流复制文件
    private static void copyFile(File srcFile, File destFile) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));

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

        bos.close();
        bis.close();
    }

}

猜你喜欢

转载自blog.csdn.net/qq_34608447/article/details/115017251