普通网友 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 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记