今天无聊时,写了一个删除工程下面所有的版本文件,即svn文件的小程序。看似简单,
可最终还耗了我不少时间。最后还是剩下几个问题,提出来大家讨论下。
首先,贴出我使用过的删除文件的几种方法:
最常见的删除方法:
/**
* 强制删除文件
*
* @param _file
* @throws Exception
/
private static void FroceDelete(File _file) throws Exception{
try {
_file.delete();
} catch(Exception e) {
// TODO 打印警告信息 文件删除失败
_file.deleteOnExit();
} finally {
if(_file.exists()) {
//TODO 抛出文件删除失败异常
}
}
}
第二种方法:
/*
* 通过命令删除文件
*
* @param _file
*/
private static void deleteFileByCommand(File _file) {
Runtime rt = Runtime.getRuntime();
try {
//该命令不能删除这样的文件夹:里面有文件或其它文件夹的文件夹
rt.exec("rd /s/q "+_file.getAbsolutePath());
}catch(IOException e){
e.printStackTrace();
}
}
最后终于删除了.svn文件的删除方法,其实就是采用第一种方法递归删除:
private static void delete(File _directory) {
if(_directory.isFile()) { //如果为文件则直接删除
_directory.delete();
return;
}
//若果为文件夹 递归遍历删除文件
File[] fileArr = _directory.listFiles();
for(File file:fileArr) {
delete(file);
//顺便问一下,以下面这种方式写为什么编译有问题?希望帮忙解决下
//file.isFile()?file.delete():delete(file);
}
_directory.delete(); //最后删除剩余的空文件夹
}
最后,是我的一些见解和疑问,大家讨论下,发布下看法:
1. file.delete()或file.deleteOnExit()方法只能删除文件或空文件夹
2. 'file.isFile()?file.delete():delete(file);'为什么编译不过?
3. 奇怪的现象:'rd /s/q 文件路径 ' 命令在dos里执行一点问题都没有,不管要删除的
文件夹里是否有文件。而在java程序里通过Runtime形式执行时报错。为什么呢?
4.还是递归删除文件比较保险。但不管怎么样,正在使用的文件都无法删除
问题补充
居然没人回复 自己赞一个