在我的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
?
答案 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
目录及其所有文件,因为在删除目录之前该目录必须为空。