【问题标题】:Java not able to delete file on "C:\" driveJava 无法删除“C:\”驱动器上的文件
【发布时间】:2013-01-02 21:42:36
【问题描述】:

我有以下代码:

public Tester()
{
    try {
        File f4 = new File("C:\\Vase.zip");
        System.out.println(f4.exists());
        f4.delete();
        System.out.println(f4.exists());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

当我运行程序时,它不会删除文件。 (如果我把文件放在 D 盘,然后要求它删除,它就完美了。)所以我知道这是一个权限问题。我正在使用日食。我只在管理员模式下运行 eclipse [in windows]。

该程序能够写入和删除其他文件,但仅此一个不起作用。谁能指导我如何解决这个问题?

【问题讨论】:

  • throw new RuntimeException(e) 替换e.printStackTrace()(或使用throws IOException 方法并向上传播)——也就是说,让程序死掉(同时删除任何多余的外部try/catch)而不是将其塞入可能被掩埋的打印痕迹中。之后:程序是否会因异常而可怕地死掉?
  • Eclipse 可能在管理员模式下运行,但您必须记住,运行 java 程序会启动 java.exe 的新实例。那可能没有从调用者应用继承的管理员权限。
  • @GeorgeVremescu 每当我以管理员模式运行 Eclipse 时,我从中运行的应用程序也具有管理员权限。我一直注意到这一点。但无论如何,我将其缩小到这一点,我的代码的另一部分使用了该文件并且没有 .close() 它。我可以运行一些函数来强制所有其他输入流等放弃它,而不是在整个程序中搜索错误吗?
  • 这意味着java应该有一个所有打开流的日志......这将是一个有趣的想法!
  • 别怪我,如果我错了,但看起来文件在其他地方打开。

标签: java windows file permissions


【解决方案1】:

可能它在您的存档器中打开。

或者其他地方。

或者(不太可能但可能)- 某个进程已经结束,但系统仍代表该进程持有它。

  1. 关闭所有应用程序(当然除了 Eclipse),然后重试。
  2. 它 1. 不起作用 - 尝试重新启动,打开 Eclipse 并重试。

如果这不起作用 - 权限应该是问题。

【讨论】:

    【解决方案2】:

    这可能是出现管理员权限问题。

    请以管理员身份运行您的 IDE 或使用命令提示符运行您的代码,然后它将轻松删除文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 2014-01-09
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多