【问题标题】:mkdir() returns false after deleting the foldermkdir() 删除文件夹后返回 false
【发布时间】:2014-11-20 01:56:45
【问题描述】:

我的应用程序中有一个名为“重置”的按钮,用于删除整个文件夹(用户文件夹)。之后,我尝试再次创建相同的文件夹,第一次尝试时,它允许我创建文件夹,但第二次尝试重置并重新创建用户文件夹时,应用程序崩溃,因为 mkdir () 没有创建文件夹,我试图在该文件夹上创建一个数据库。但是,奇怪的是,在崩溃之后,文件夹已经被创建了。

我有权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

这两种方法我都试过了:

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

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

【问题讨论】:

  • 我看到了很多关于这个的问题,但没有一个对我有帮助。
  • 与其删除并重新创建同一个文件夹,不如直接清空它?这是一个更智能(也经过优化)的解决方案。
  • 我有想过,但我想要的是完全删除所有用户文件夹,我没有什么无用的文件夹,即使它是空的。我认为这是一个“肮脏”的解决方案。虽然如果我无法修复它,我会这样做。
  • I don't what any useless folder, even if it is empty 这是废话。如果您重新创建相同的“无用文件夹”(当您创建它时它是),它更快并且更安全 使其为空而不是删除并重新创建它
  • 如果目录已创建则返回 true,失败或目录已存在则返回 false。根据developer.android.com/reference/java/io/File.html#mkdir()你确定你的文件夹被第二次删除了吗?

标签: android mkdir mkdirs


【解决方案1】:

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

删除目录时,重命名并删除。然后,通常使用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();
}

【讨论】:

    【解决方案2】:

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

    可能的解决方案

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

    【讨论】:

    • 我之前尝试过创建文件夹,但是就像我说的,mkdir 不起作用并返回false。
    • mkdir 和 mkdirs 如果目录已经存在则返回 false,因此这可能是失败的原因之一。如果您使用的是 Java 7,则可以使用 Files 类。它会在错误时引发 IOException,并具有很好的描述 Files.createDirectory(file.toPath());
    • 我可以在 Android 上使用 Java 7 吗?我不这么认为。
    猜你喜欢
    • 2016-09-25
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多