无法理解File object.delete()的工作原理

时间:2014-04-22 07:02:08

标签: java jar java-5

我正在尝试使用java 5删除jar文件(因此Java 7中引入的Paths API不是一个选项)。

我的代码:

String sep = File.separator;

File test = new File("."+ sep + "server" + sep + "lib" + sep + "testJar.jar");
if(test.delete())
{
    logger.log(Level.INFO,test.getName() + " deleted.");
}
else
{
    logger.log(Level.INFO,"Delete operation is failed for "+test.getName());
}

当我的代码被执行时,jar文件被删除但是Delete operation is failed for testJar.jar被打印在logs.Cant中理解为什么......感谢任何帮助。

更新 我再次尝试了相同的代码,这次它说testJar.jar deleted现在我很困惑发生了什么

2 个答案:

答案 0 :(得分:1)

我发现这个问题已经神奇地消失了,但是一些常见的故障排除提示:

首先;尝试创建和删除另一个文件并检查文件权限/所有权。

检查另一个进程是否未保留该文件:

$ lsof filename

测试基础操作系统调用。

File.delete()将委托给底层操作系统,通常最终会调用remove(或取消链接)。如果您使用OpenJDK,您应该能够浏览源代码。如果没有,看看你是否可以追踪“幕后”发生的事情。

编写一个small snippet,只需执行此调用,并查看当您尝试删除此文件时操作系统的行为。

答案 1 :(得分:0)

如果您尝试删除的文件不存在,则文件删除失败。出于安全原因也失败(在本地系统上执行的权限不足)

例如,如果正在运行的应用程序使用jar,或者通过工具(如防病毒软件)进行分析,或者通过工具(如防病毒软件)进行分析,则会阻止这种情况,...