【问题标题】:Unable to delete hidden files in Linux with Java无法使用 Java 删除 Linux 中的隐藏文件
【发布时间】:2014-11-03 00:36:45
【问题描述】:

环境:

  • Linux Ubuntu 14.04LTS
  • Java 1.7

当前代码:

String fileName = ".fileName";
            try {
                java.io.File F = new java.io.File(fileName);
                java.io.RandomAccessFile RF = new java.io.RandomAccessFile(F,"rwd");
                RF.close();
                boolean deleted = F.delete();                   
                System.out.println("File was deleted: " + deleted);
            } catch (FileNotFoundException e1) {
                System.out.println("Unable to access file: " + e1.getMessage());
            }

文件仍然存在,但已删除是真的,没有FileNotFoundException 被捕获。

【问题讨论】:

  • 调用F.delete时文件不会一直打开吗?尝试先关闭RFFile#delete返回一个boolean表示操作成功,你可能要检查一下
  • 确保您的文件位于您认为的路径中。还有,为什么在打电话给delete() 之前打开文件?
  • 编辑代码以反映 @MadProgrammer 的建议。奇怪的是它说它已被删除,但文件仍然存在。
  • 原来是空格问题。 String.trim() 解决了这个问题。

标签: java linux hidden-files


【解决方案1】:

以下其中一项可能是您的问题:

  • 您是否在正确的目录中删除?我注意到您指定的不是绝对路径,而是相对路径,这并不意味着您故意指定相对路径。您可能正在删除另一个目录中的某些内容。
  • 关闭文件F,你让句柄保持打开状态,我不确定后果。
  • 您如何验证“它仍然存在”? ls 而不是 catnano 或任何对吗?

及其他调试:

  • 打开射频重要吗? (不应该)。
  • 它是一个隐藏文件真的重要吗?您实际上要删除什么文件?
  • 这是否发生在不同的目录中?
  • 如果您使用chmod 锁定对相关文件的读/写访问权限,是否会发生这种情况?如果你阻止读取失败,如果你阻止写入失败?我强烈怀疑这将阐明您的问题。

【讨论】:

  • 原来是空格问题。 String.trim() 解决了这个问题。如果文件首先不存在,则 delete 返回 true 似乎具有误导性。但仍然非常有用的建议。谢谢。
  • @cbrad 考虑将其发布为答案并接受。最好描述你的调试步骤来解决这个问题。
【解决方案2】:

我知道这是一个旧线程,但这可能对其他人有用,因为没有人指出这一点。 catch 块正在捕获永远不会抛出的异常。如果您想知道文件是否存在然后被删除,请使用 java.nio.Files.delete(Path)。如果文件不存在,它将抛出 FileNotFoundException。检查javadocs,这都详细说明了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 2021-11-03
    • 2011-01-28
    • 2014-03-31
    • 2014-09-01
    相关资源
    最近更新 更多