我以前见过这个问题,并试图使用垃圾收集器,但这对我不起作用。
我使用了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
,并说明失败的原因。