删除文件夹后,mkdir() 返回 false。

5
我在我的应用程序中有一个名为“重置”的按钮,它可以删除整个文件夹(用户文件夹)。然后,我尝试重新创建相同的文件夹。第一次尝试时,它允许我创建该文件夹,但第二次尝试重置并重新创建用户文件夹时,应用程序崩溃了,因为mkdir()没有创建该文件夹,而我尝试在该文件夹上创建数据库。但是,奇怪的是,在崩溃后,该文件夹已被创建。
我拥有权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

我尝试了两种方法:

f.mkdir();
f.mkdirs();

我做错了什么?有什么想法吗?

我看到了很多关于这个问题的提问,但是它们都没有对我有所帮助。 - Mario Velasco
1
为什么不直接清空文件夹,而要删除并重新创建相同的文件夹呢?这是一种更智能(也更优化)的解决方案。 - Phantômaxx
我已经考虑过了,但是我想要的是完全删除所有用户文件夹,我不想要任何无用的文件夹,即使它是空的。我认为这是一个“肮脏”的解决方案。尽管如果我无法修复它,我会这样做。 - Mario Velasco
根据http://developer.android.com/reference/java/io/File.html#mkdir(),如果目录创建成功则返回true,否则返回false,或者如果该目录已经存在也会返回false。你确定你的文件夹第二次被删除了吗? - Vny Kumar
@VnyKumar 是的,我非常确定。 - Mario Velasco
显示剩余2条评论
2个回答

4

我也遇到了同样的问题。但是最后我想我找到了一个解决方案(可能是一种变通方法)。

当您要删除目录时,请先将其重命名,然后再删除。接着,通常情况下使用File.mkdirs()创建目录即可。这应该可以很好地工作。在我的情况下进行了测试。它有效!

public static final void renameAndDelete(File fileOrDirectory) {
    File newFile = new File(fileOrDirectory.getParent() + File.separator
                + "_" + fileOrDirectory.getName());
    fileOrDirectory.renameTo(newFile);
    delete(newFile);
}
public static final void delete(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory())
        for (File child : fileOrDirectory.listFiles())
            delete(child);

    fileOrDirectory.delete();
}

0

我认为这是因为您调用了一个创建文件夹的方法,在文件夹创建之前,您尝试在其中创建一个数据库!

可能的解决方案

尝试在成功创建文件夹后再创建数据库。而创建数据库时,再次检查该文件夹/路径是否存在。


我之前尝试过创建文件夹,但就像我说的那样,mkdir不起作用并返回false。 - Mario Velasco
如果目录已经存在,mkdir和mkdirs会返回false,这可能是失败的原因之一。 如果您使用的是Java 7,则可以使用Files类。它会抛出IOException错误,并提供相当好的描述。Files.createDirectory(file.toPath()); - Rohit
我能在Android上使用Java 7吗?我认为不行。 - Mario Velasco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接