Java 无法理解文件对象的工作方式。删除()

Java 无法理解文件对象的工作方式。删除(),java,jar,java-5,Java,Jar,Java 5,我试图使用Java5删除一个jar文件(因此Java7中引入的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 {

我试图使用Java5删除一个jar文件(因此Java7中引入的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文件被删除,但是testJar的
删除操作失败。jar
被打印在日志中。我不明白为什么。非常感谢您的帮助

更新:
我再次尝试了相同的代码,这次它显示
testJar.jar已被删除
现在我对正在发生的事情感到困惑

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

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

检查另一个进程是否没有保存该文件:

$ lsof filename
测试底层操作系统调用。

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


编写一个简单执行此调用的函数,并查看当您尝试删除此文件时操作系统的行为。

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


典型的情况是,如果jar被正在运行的应用程序使用,或者被独占打开,或者被工具(如防病毒软件)分析,jar文件可能被某个人打开,例如JVM。您可以尝试使用
deleteOnExit
,它将在JVM正常终止时尝试删除该文件,但它仍然可能无法工作。我相信Java 7通过让
类加载器
在完成Jar的读取后关闭Jar来纠正这个问题…使用
文件.delete(Path)
-这会引发异常,而不是返回
布尔值
。要获取
路径
,请对
路径使用
文件.toPath
。获取
。这应该会给你一个描述性错误。@BoristheSpider谢谢你的提示。nio是在java 7中引入的,而我仅限于使用java 5。对此有什么建议吗?似乎没有人在阅读实际问题。OP表示文件已删除,但
delete()
返回false。即使我无法重新创建问题。我认为应该关闭此问题