java复制文件删除文件工具类

复制文件

 public static boolean copyAllToAnotherDirectory(File srcDir, File desDir)
  {
    if (srcDir == null | desDir == null){
      logger.error("复制文件错误,文件夹信息参数为空");
      return false;
    }
    // 源文件不存在时抛出非法参数异常
    if (!srcDir.exists()){
      logger.error("复制源不存在");
      return false;
    }
    // 系统中不存在目标目录,则创建一个desDir这样的目录。
    if (!desDir.exists() || !desDir.isDirectory())
      desDir.mkdirs();
    FileInputStream fis = null;
    FileOutputStream fos = null;
    File desChildFile = null; // 当前级别的目标子文件或子目录对象
    byte[] bs = new byte[1024 * 1024]; // 保存读取或写入流数据的字节数组
    int len=0;  //读到的字节长度
    try
    {
      // 源目录是一个普通文件时
      if (srcDir.isFile())
      {
        fis = new FileInputStream(srcDir); // 初始化源文件输入流
        desChildFile = new File(desDir, srcDir.getName()); // 初始化一个目标文件对象
        // 在磁盘上创建一个desChildFile对象对应的目标文件
        if (!desChildFile.exists())
          desChildFile.createNewFile();
        fos = new FileOutputStream(desChildFile); // 初始化目标文件的输出流
        while ((len=fis.read(bs) )!= -1) // 读数据
        {
          fos.write(bs,0,len); // 写数据
        }

        // 源目录是一个正常目录时
      }
      else if (srcDir.isDirectory())
      {

        // 罗列出当前源目录下所有的下一级文件、下一级目录,保存在File数据中
        File[] childFiles = srcDir.listFiles();

        /*
         * 遍历当前级源目录的子文件、子目录,
         * 并分别针对其下的文件、目录 进行不同的处理,进入不同分支。
         */
        if (childFiles==null){
          return false;
        }
        for (File childFile : childFiles)
        {

          // 下级元素是一个普通文件时
          if (childFile.isFile())
          {
            fis = new FileInputStream(childFile); // 初始化源文件输入流
            // 初始化一个在当前级目标目录下,和当前级源目录子文件同名的文件对象
            desChildFile = new File(desDir, childFile.getName());
            // 在磁盘上创建一个desChildFile对象对应的文件
            if (!desChildFile.exists())
              desChildFile.createNewFile();
            fos = new FileOutputStream(desChildFile); // 初始化目标文件输出流
            while ((len=fis.read(bs) )!= -1) // 读入数据
            {
              fos.write(bs,0,len); // 向desChildFile对象对应的文件上写入数据
            }
            closeStream(fis, fos);  //关闭输入输出流
            desChildFile=null;  //desChildFile赋空,方便垃圾回收器收回内存
          }
          // 下级元素是一个目录时
          else if (childFile.isDirectory())
          {
            // 初始化一个在当前级目标目录下,和当前级源目录子目录同名的目录对象
            desChildFile = new File(desDir.getAbsoluteFile() + "/" + childFile.getName());
            // 在磁盘上创建一个desChildFile对象对应的目录
            if (!desChildFile.exists())
              desChildFile.mkdirs();
            copyAllToAnotherDirectory(childFile, desChildFile); // 递归调用方法本身
          }
        }
      }
    } catch (IOException e)
    {
      e.printStackTrace();
      return false;
    } finally
    {
      closeStream(fis, fos);
    }
    return true;
  }

关闭流

private static void closeStream(FileInputStream fis,FileOutputStream fos){
    try {
      if (fis!=null){
        fis.close();
      }
      if (fos!=null){
        fos.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
      logger.error("二次交办复制附件时关闭流失败,请检查异常");
    }
  }

递归删除目录下的所有文件及子目录下所有文件

public static boolean deleteDir(File dir) {
    if (dir.isDirectory()) {
      String[] children = dir.list();
//递归删除目录中的子目录下
      assert children != null;
      for (int i = 0; i<children.length; i++) {
        boolean success = deleteDir(new File(dir, children[i]));
        if (!success) {
          return false;
        }
      }
    }
    // 目录此时为空,可以删除
    return dir.delete();
  }

版权声明:本文为whlqunzhu原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。