通过Java中的IO流,实现文件夹的复制和删除。

为了方便起见,打包成了工具类。
  • 该类中有三个方法: 采用字节流方式,可以读取所有格式的文件。(字符流的底层是字节流+编码的方式实现的)
  • CopyFolder 复制目标文件夹。 两种情况:源文件下无文件夹 和 源文件下有嵌套文件夹。
  • CopyFile 复制目标文件夹下的文件。 用FileInputStream 读取源文件文件 ,FileOutputStream流 写入目标文件路径。
  • DeleteFolder 删除目标文件。
  • 需要调用的File类方法:
  • 判断功能:
  • public boolean isDirectory() 判断是否是目录,而不是文件。
  • public boolean isFile() 判断是否是文件,而不是目录。
  • 获取功能:
  • public File[] listFiles() 获取指定目录下的所有文件或者文件夹的File数组 。
  • 创建功能:
  • public boolean mkdir() 创建文件夹。如果存在这样的文件夹,就不创建了 注意这个方法只能创建单层目录 如果创建多层目录,得一层一层创建。
  • 删除功能:
    public boolean delete() 删除当前目录或文件。
package CopyorDelete;

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

/**
 * @author Prince、
 * @date 2020/2/15
 */
//   参数说明:
//	   File srcFloder 源文件夹(被复制) 
//     File aimFloder 目标文件夹(被生成)
//   方法说明:
//     CopyFolder 复制文件夹操作 两种:源文件下无文件夹 和  源文件下有嵌套文件夹。
//     CopyFile  复制文件夹下的文件,用FileInputStream 读取源文件文件 FileOutputStream流 写入目标文件路径。
//     DeleteFolder  删除目标文件。
public class MyUtils {
        //复制文件夹操作 两种:源文件下无文件夹 和  源文件下有嵌套文件夹
   public static void CopyFolder(File srcFloder, File aimFloder) throws IOException {
        //复制操作
        //1.先获取目标文件夹下的所有文件和文件夹
        File[] files = srcFloder.listFiles();
        //2.遍历每个文件进行复制
        for (File file : files) {
            // 如果是文件
            if (file.isFile()){
                //复制每一个文件
                CopyFile(file,aimFloder);
                //如果是目录,不是文件
            }else if (file.isDirectory())
            {
                //封装源文件夹,封装目标文件夹,递归调用
                //如果不是文件,就在目的地下创建文件夹
                File aim2Floder = new File(aimFloder,srcFloder.getName());
                aim2Floder.mkdir();
                //递归调用, 当前文件,目标文件夹下新的文件夹目录
                CopyFolder(file,aim2Floder);
            }
        }
    }

    public static void CopyFile(File file, File aimFloder) throws IOException {
        //封装源文件
        FileInputStream in = new FileInputStream(file);
        //封住目标文件
        FileOutputStream out = new FileOutputStream(new File(aimFloder,file.getName()));
        //用字节数组 读取文件内容并输出写入到目标文件夹下
        int len = 0;
        byte[] bytes = new byte[8*1024];
        while ((len = in.read())!=-1){
            out.write(bytes,0,len);
            out.flush();
        }
        out.close();
    }

    public static void DeleteFolder(File file) {
        //如果是文件
        if(file.isFile()){
            //删除文件
            file.delete();
            //如果不是文件,是文件夹
        }else if(file.isDirectory()) {
            File[] files = file.listFiles();
            for (File file1 : files) {
                //如果是文件,删除删除文件
                if(file1.isFile()){
                    file1.delete();
                    //如果不是文件,是是文件夹
                }else if(file1.isDirectory()){
                    DeleteFolder(file1);
                }
                //删除空文件夹
                file.delete();
            }
        }
    }
}
使用说明:选择需要实现的功能,传参调用即可。