前一段时间写程序的时候需要用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();
}
}
}