无法删除存在的文件,但我看不到



我以前见过这个问题,并试图使用垃圾收集器,但这对我不起作用。

我使用了mkdirs()方法来创建一组目录。Java报告它们存在,但我在我的系统上看不到它们应该在哪里。我使用的是Mac OS X Yosemite,所以我不知道这是Mac特定的问题还是Java中的错误。

我的代码:

import java.io.*;
public class FileChecker {
   public static void main(String[] args) {
      File file = new File("~/MyDirectory"); // in my home folder
      System.out.println("Exists: " + file.exists()); // true
      System.out.println("Can read: " + file.canRead()); // true
      System.out.println("Can write: " + file.canWrite()); // true
      System.out.println("Can execute: " + file.canExecute()); // true
      System.gc();
      System.out.println("Deleted: " + file.delete()); // still false
   }
}

当我在Finder中打开主目录~时,文件夹不会出现。在终端中执行ls也不会产生任何结果。

  File file = new File("~/MyDirectory"); // in my home folder

"~"对于像bash这样的shell和某些其他选择赋予它特殊含义的程序来说是特殊的。这对java.io.File或操作系统本身都没有意义。您在这里创建的File对象指的是java进程当前工作目录中的一个名为"~"的目录,然后是这个名为"~"的目录中的名为"MyDirectory"的目录。

尝试将这一行添加到您的程序中:

System.out.println(file.getAbsolutePath());

这将打印出java正在使用的文件的实际路径。一旦你知道这个"MyDirectory"到底在哪里,你就可以清楚地知道为什么不能删除它。例如,它可能是一个不为空的目录。

File#delete()是一个旧的java 1时代的方法,它没有为您提供任何信息来说明它为什么不能删除。

尝试使用JAVA 7 Files.delete(Path(,它将抛出一个IOException,并说明失败的原因。

相关内容

最新更新