[转载] Java删除文件夹

来源:互联网 发布:解剖生理学试题软件 编辑:程序博客网 时间:2024/05/17 23:32
 
 
 

/**
  * 功能:删除文件夹,传入地址
  *
  */
 public void deleteDirs(String dir) {
  try {
   
String m_root = new File(dir);
 ArrayList  m_dirs = new ArrayList();

   m_dirs.add(m_root);

   this.visitAll(m_root); // 获取指定路径下的所有文件已经文件夹(递归调用)
   this.rootDelete(); // 删除list中的所有文件(倒叙循环删除)

  } catch (Exception ex) {
   System.out.println("error in deleteDirs : " + ex.getMessage());
  }
 }

 /**
  * 功能:删除文件或文件夹 注意:使用倒叙删除,先删除文件,然后删除空文件夹
  */
 private void rootDelete() {
  try {
   if (m_dirs != null) {
    // 使用倒叙循环删除(先删除文件,再删除文件夹)
    for (int i = m_dirs.size() - 1; i >= 0; i--) {
     File f = (File) m_dirs.remove(i);// 获取之后删除list中的数据
     // 删除数据
     if (!f.delete()) {
      System.out.println("文件路径:" + f.toString() + " 不存在");
     }
    }
   } else {
    System.out.println("获取文件list列表(m_dirs)为空");
   }
  } catch (Exception ex) {
   System.out.println("error in rootDelete : " + ex.getMessage());
  }
 }

 /**
  * 功能:获取所有文件和文件夹,存储在m_dirs中 注意:递归调用
  *
  * @param tempRoot
  *            文件路径
  */
 private void visitAll(File tempRoot) {
  try {
   // 获取指定路径下的所有文件
   File[] dirs = tempRoot.listFiles();
   if (dirs != null) {
    // 将文件数组转换成List对象
    List dirslist = Arrays.asList(dirs);
    // 将dirslist完全添加到m_dirs中
    m_dirs.addAll(dirslist);
    // 递归调用
    for (int i = 0; i < dirslist.size(); i++) {
     this.visitAll((File) dirslist.get(i));
    }
   }
  } catch (Exception ex) {
   System.out.println("error in visitAll : " + ex.getMessage());
  }
 }

 
下面是我的应用 基本一致

/**
     * ファイルあるいはフォルダを削除します
     *
     * @param dir
     */

    public void deleteDirs(String dir) throws WebftException {
        try {
            log.debug("deleteDirs start");
            File m_root = new File(dir);
            ArrayList m_dirs = new ArrayList();
            m_dirs.add(m_root);
            visitAll(m_root, m_dirs);
            rootDelete(m_dirs);
        } catch (Exception ex) {
            throw new WebftException(ReturnCodeConstants.RC_CONFIG_READ_ERROR);
        } finally {
            log.debug("deleteDirs end");
        }
    }

    /**
     * 先にファイルを削除して、それから空っぽなフォルダを削除します
     *
     * @param m_dirs
     */

    private void rootDelete(ArrayList m_dirs) throws WebftException {
        try {
            log.debug("rootDelete start");
            if (m_dirs != null) {
                for (int i = m_dirs.size() - 1; i >= 0; i--) {
                    File f = (File) m_dirs.remove(i);
                    if (!f.delete()) {
                        throw new WebftException(ReturnCodeConstants.RC_CONFIG_READ_ERROR);
                    }
                }
            } else {
                throw new WebftException(ReturnCodeConstants.RC_CONFIG_READ_ERROR);
            }
        } catch (Exception ex) {
            throw new WebftException(ReturnCodeConstants.RC_CONFIG_READ_ERROR);
        } finally {
            log.debug("rootDelete end");
        }
    }

    /**
     * すべてのファイルとフォルダを得て、メモリーはm_dirsの中で。
     *
     * @param tempRoot
     *            フェイルのパス
     */
    private void visitAll(File tempRoot, ArrayList m_dirs) throws WebftException {
        try {
            log.debug("visitAll start");
            File[] dirs = tempRoot.listFiles();
            if (dirs != null) {
                List dirslist = Arrays.asList(dirs);
                m_dirs.addAll(dirslist);
                for (int i = 0; i < dirslist.size(); i++) {
                    visitAll((File) dirslist.get(i), m_dirs);
                }
            }
        } catch (Exception ex) {
            throw new WebftException(ReturnCodeConstants.RC_CONFIG_READ_ERROR);
        } finally {
            log.debug("visitAll end");
        }
    }

原创粉丝点击