Java文件夹递归删除方法
前一段时间写程序的时候需要用java删除一个文件夹以及文件夹下的所有功能,java文件类中的delete方法只能删除空文件夹,后来到网上搜了一下,发现有些朋友已经实现了这个功能,并且提供了源代码,于是找了一个编译测试,通过,一切顺利!但是过了一个多月发现出了问题,因为我是在linux平台上开发,但是系统可能运行在window平台上。在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();
}
}
}

/*
* visit all a director and save them in a list
*/
@SuppressWarnings("unchecked")
private static void visitAll(java.io.File tempRoot) throws Exception {
java.io.File[] dirs = tempRoot.listFiles();
if (dirs != null) {
List dirsList = Arrays.asList(dirs);
if (dirsList == null) {
try {
if(!tempRoot.delete())
throw new Exception("Exception: delete file " +
tempRoot.getName() + " false!");
} catch (Exception e) {
throw e;
}
} else {
m_dirs.addAll(dirsList);
for (int i = 0; i < dirsList.size(); i++) {
tempRoot = (java.io.File) dirsList.get(i);
visitAll(tempRoot);
}
}
}
}

/*
* do delete
*/
private static void myDelete() throws Exception {
visitAll(m_root);
if (m_dirs != null) {
for (int i = m_dirs.size() - 1; i >= 0; i--) {
java.io.File f = (java.io.File) m_dirs.remove(i);
String fileName = f.toString();
if (!f.delete()) {
throw new Exception("Exception: delete file " + fileName + " false!");
}
}
} else {
throw new Exception("Exception: read file list of " + m_root.toString()
+ "false!");
}
}
}
这个类参考了 Java删除文件夹 (我参考的不是这篇文件,时间长了找不到原始文章,但是这篇文章类似)。
我在这里想说两个问题:
try
{
......//打开文件
}
catch
(Exception e)
{
......//处理异常
}
finally
{
......//关闭文件
}
注:非常感谢 MyGarden 提供上面的删除文件夹的源代码
下面是我修改后的文件夹删除类的源代码:

























































































































这个类参考了 Java删除文件夹 (我参考的不是这篇文件,时间长了找不到原始文章,但是这篇文章类似)。
我在这里想说两个问题:
- 如何正确进行异常处理?
- 文件操作无论如何都应该最后把打开的文件流给关闭







注:非常感谢 MyGarden 提供上面的删除文件夹的源代码