无法删除目录,Java

时间:2012-07-24 16:53:09

标签: java

在我的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

3 个答案:

答案 0 :(得分:6)

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

  

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

答案 1 :(得分: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
     

访问文件

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

答案 2 :(得分:3)

如前所述,在删除目录之前,您的目录必须为空。你应该看一下很棒的教程here。您需要recursive delete目录及其所有文件,因为在删除目录之前该目录必须为空。