1

在我的jUnit中,我有以下代码段:

private String  session = "/tmp/session/";
private File    f;

@Before
public void setUp() {
    f = new File(session);
    f.mkdir();
}

@After
public void tearDown() {
    System.out.println("Directory deleted:   " + f.delete()); // always false
}

同时:

  • 目录权限没问题 ( drwxr-xr-x)
  • 目录包含一些文件 ( -rw-r--r--)
  • 没有所有权问题(创建者用户删除)

什么会导致f.delete()失败?f.delete()相当于rm -rf? _

4

3 回答 3

6

递归删除非空目录(而不是在此过程中重新发明轮子)的最简单方法是使用现有库中的功能,例如 Apache Commons 文件实用程序的FileUtils.deleteQuietly()方法,它指定:

如果文件是一个目录,删除它和所有子目录(...)要删除的目录不必为空

于 2012-07-24T17:01:57.730 回答
3

如前所述,您的目录在删除之前需要为空。这里有一个很棒的教程,你应该看看。你需要一个recursive delete目录和它的所有文件,因为在你删除它之前目录需要是空的。

于 2012-07-24T16:59:54.703 回答
3

从 File.delete 的 API 文档中:

delete

public boolean delete()
Deletes the file or directory denoted by this abstract pathname. If this pathname
denotes a directory, then the directory must be empty in order to be deleted.
Returns:
true if and only if the file or directory is successfully deleted; false otherwise
Throws:
SecurityException - If a security manager exists and its SecurityManager.checkDelete(java.lang.String) method denies delete

访问文件

请注意有关目录需要为空的位。

于 2012-07-24T16:56:15.470 回答