Java文件夹递归删除方法

前一段时间写程序的时候需要用Java删除一个文件夹以及文件夹下的所有功能,java文件类中的delete方法只能删除空文件夹,后来到网上搜了一下,发现有些朋友已经实现了这个功能,并且提供了源代码,于是找了一个编译测试,通过,一切顺利!但是过了一个多月发现出了问题,因为我是在Linux平台上开发,但是系统可能运行在Windows平台上。在Linux平台上运行正确,但是到Windows平台上以后,发现提示用户删除文件成功了,但是实际文件并没有被删除?debug了半天才找到问题原因:原来在Linux平台上即使文件被其他程序打开也同样可以使用java文件类的delete方法删除,而Windows平台却不可以。

下面是我修改后的文件夹删除类的源代码:
public class FolderDeleter...{

private static Log log = LogFactory.getLog(FolderDeleter.class);
    private static java.io.File m_root;
    private static ArrayList m_dirs;

/** *//**
     * 递归删除文件夹以及子文件夹
     * @param dir 文件夹绝对路径
     * @throws Exception 删除文件异常
     */
    @SuppressWarnings("unchecked")
    public static void deleteDirs(java.io.File dir) throws Exception ...{
        m_root = dir;
        m_dirs = new ArrayList();
        if (!m_root.isDirectory()) ...{
            throw new Exception("Exception:"" + m_root.toString()
                    + "" is not a director");
        } else ...{
            // delete all director
            try ...{
                m_dirs.add(m_root);
                myDelete();
            } catch (Exception e) ...{
                log.error(">>>删除文件出错:", e);
                throw e;
            }
        }
    }

/** *//**
     *
     * @param dirPath
     *            String a director file path;
     * @throws Exception
     *             if dirPath is not a director file path
     */
    public static void deleteDirs(String dirPath) throws Exception ...{
        m_root = new File(dirPath);
        deleteDirs(m_root);
    }

/** *//**
     * 递归删除文件夹以及子文件夹
     * @param dirPath 文件夹绝对路径
     * @throws Exception 删除文件异常
     */
    public static void deleteSubDirs(String dirPath) throws Exception ...{
        m_root = new java.io.File(dirPath);
        deleteSubDirs(m_root);
    }

/** *//**
     * 递归删除文件夹以及子文件夹
     * @param dir 文件夹绝对路径
     * @throws Exception 删除文件异常
     */
    public static void deleteSubDirs(java.io.File dir) throws Exception ...{
        m_root = dir;
        m_dirs = new ArrayList();
        // deleteDirs(m_root);
        if (!m_root.isDirectory()) ...{
            throw new Exception("Exception:"" + m_root.toString()
                    + "" is not a director");
        } else ...{
            for (int i = 0; i < m_dirs.size(); i++) ...{
                System.out.println(((File) m_dirs.get(i)).toString());
            }
            try ...{
                myDelete();
            } catch (Exception e) ...{
                e.printStackTrace();
            }
        }
    }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwpdsj.html