普通网友 2010-04-14 23:27
浏览 229
已采纳

采用JAVA编程删除文件的几种方式

    今天无聊时,写了一个删除工程下面所有的版本文件,即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.还是递归删除文件比较保险。但不管怎么样,正在使用的文件都无法删除
问题补充
居然没人回复 自己赞一个
  • 写回答

6条回答 默认 最新

  • sokoo108 2010-04-14 23:27
    关注

    [quote="XTU_xiaoxin"]居然没人回复 自己赞一个[/quote]
    首先我解释下你第3个奇怪的现象吧

    在我学dos的时候,我只记得rd是用来删除空目录的,但看了你的问题我在命令行中测试文件是删不了,提示错误如下:The directory name is invalid.
    应该用del命令删除文件。

    但是你这个程序如果写成 del /s/q 文件路径 +文件名 在命令行下是没问题的。但是在程序里是会抛io异常的,问题在于 del 不是一个application,而是command的内部命令,嵌入在command中的,所以如果要使用Runtime 来执行删除的话,需要在del前面加上 cmd.exe /c,完整的写法如下 : cmd /c del /s/q 路径文件名 或者 cmd /c del 路径文件名

    以上

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败