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

时间:2015-10-09 15:53:58

标签: java macos

之前我已经看过这个问题,并试图使用垃圾收集器,但这对我没用。

我使用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也不会产生任何效果。

1 个答案:

答案 0 :(得分:3)

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

“〜”特别适用于像bash这样的shell以及某些选择赋予其特殊含义的其他程序。它对java.io.File或操作系统本身没有意义。你在这里创建的File对象引用了java进程当前工作目录中名为“〜”的目录,然后是这个名为“〜”目录的名为“MyDirectory”的目录。

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

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

这将打印出java正在使用的文件的实际路径。一旦你知道这个“MyDirectory”到底在哪里,你可能会明白为什么你不能删除它。例如,它可能是一个非空的目录。