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

标签 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 打印在日志中。无法理解为什么..任何帮助表示赞赏。

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

最佳答案

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

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

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

$ lsof filename

测试底层操作系统调用。

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

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

关于java - 无法理解 File object.delete() 的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23212683/

相关文章:

java - 在 Spring Query 注释中使用枚举作为命名参数

java list 类路径与-classpath

java - 在 Runnable jar 文件中找不到 com.mysql.jdbc.Driver

java - 从java文件编译另一个java文件

java - 重用 StringBuffer

java - Collections中的synchronizedMap方法是否同步读写操作

java - 如何在线程完成可运行后停止线程?

java - PowerMock - 如何调用操作模拟方法的参数

java - 如何以毫秒为单位设置计时器 (MM :SS:mm)

java - jar 文件(如 .net 程序集)可以通过编程方式进行版本控制吗?