Java Can';我不能删除一个存在但我看不见的文件

Java Can';我不能删除一个存在但我看不见的文件,java,macos,Java,Macos,我以前见过这个问题,并尝试使用垃圾收集器,但这对我来说不起作用 我使用mkdirs()方法创建了一组目录。Java报告它们存在,但我无法在我的系统上看到它们应该在哪里。我使用的是Mac OS X Yosemite,所以我不知道这是Mac特有的问题还是Java中的bug 我的代码: import java.io.*; public class FileChecker { public static void main(String[] args) { File file =

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

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

我的代码:

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
也不会产生任何结果。

文件#delete()
是一种旧的java 1时代方法,它不会为您提供任何关于它无法删除的原因的信息

尝试使用将抛出一个
IOException
,并说明失败的原因。

File#delete()
是一个旧的java 1时代方法,它不会为您提供任何无法删除的信息

  File file = new File("~/MyDirectory"); // in my home folder
尝试使用将引发
IOException
并说明失败原因的

  File file = new File("~/MyDirectory"); // in my home folder
“~”对于像
bash
这样的shell和某些其他选择赋予它特殊含义的程序来说是特殊的。它对
java.io.File
或操作系统本身都没有意义。您在这里创建的
文件
对象在java进程的当前工作目录中引用了一个名为“~”的目录,然后在这个名为“~”的目录中引用了一个名为“MyDirectory”的目录

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

System.out.println(file.getAbsolutePath());
这将打印出java正在使用的文件的实际路径。一旦你知道这个“MyDirectory”的真正位置,你就可以清楚地知道为什么你不能删除它。例如,它可能是一个非空目录

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

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

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

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

您是否有删除它的权限?您是否有删除它的权限?这并不能真正回答问题,但是+1可以帮助他们找到更好的方法。正是由于这个原因,File.delete()很糟糕。我无法告诉您这些年来我有多少次怀疑这个问题是什么,而且JVM几乎没有提供任何信息。很好的参考资料。它抛出了一些不同的异常,例如
DirectoryNotEmptyException
,这就是问题所在。但最重要的问题(为什么我首先找不到目录)是因为它是在我的NetBeans项目主页中创建的,而不是在我的用户主页中创建的。我想我应该使用
System.getProperty(“user.home”)
来代替。这并不能真正回答问题,但是+1可以帮助他们找到更好的方法。正是由于这个原因,File.delete()很糟糕。我无法告诉您这些年来我有多少次怀疑这个问题是什么,而且JVM几乎没有提供任何信息。很好的参考资料。它抛出了一些不同的异常,例如
DirectoryNotEmptyException
,这就是问题所在。但最重要的问题(为什么我首先找不到目录)是因为它是在我的NetBeans项目主页中创建的,而不是在我的用户主页中创建的。我想我应该用
System.getProperty(“user.home”)
来代替。是的,就是这样。我现在使用的是
System.getProperty(“user.home”)
。是的,就是这样。我现在使用的是
System.getProperty(“user.home”)