java mkdirs运行不正常(在Android平台上)

时间:2015-12-07 06:26:48

标签: java android file mkdirs

我遇到File.mkdirs().

的问题

[我的测试代码]

public boolean makeFolder(Context context, String path){
    if(path == null || context == null)
       return false;

    File itemPath = new File(path);
    if(itemPath.isDirectory())
        return true; //happy time1 : because already exist.

    if(itemPath.mkdirs())
        return true; //happy time2 : because It's is goal.

    //now we have trouble.
    //itemPath is not directory and can not make that folder.
    //is itemPath one of files? ok find it out.

    // first of all, check a paranet folder path.
    File parent = itempath.getParentFile();
    if(parent == null) 
        return false;

    if(parent.isDirectory()){
        if(itemPath.isFile()){
            if(itemPath.delete() == false){
                return false;
            }
        }else{
            //This is the spot where I stocked.
            sendDownloadErrorLog("failed!!");
            return false;  //check point!!!
        }
    }else{
        return false;// parent is't folder!! How I can handle this!
    }
    //once more try make folder (because we try to delete same name file
    return itemPath.mkdirs();
}

我在下载某些文件之前制作文件夹时使用了此代码。 而且这段代码真的很好用但不是每次都有效。 我很少被报道为“失败”的确切位置! (检查点!)

  1. 我检查了dest文件夹的存在。
  2. 我尝试制作dest文件夹。
  3. 我检查了dest的父类型(文件夹与否)
  4. 我尝试删除与dest文件夹名称相同的文件。 (如果存在)
  5. 最后,再次尝试制作dest文件夹。
  6. 但有时第4步失败了。 itemPath(dest文件夹)不存在。 itemPath无法弥补。 itemPath的父级存在,她是文件夹。 没有与itemPath同名的文件。 那么为什么File.mkdirs不能制作destFolder?

    有没有合理的漏洞?

    请告诉我。

1 个答案:

答案 0 :(得分:1)

if(itemPath.isDirectory())
    return true; //happy time1 : because already exist.

if(itemPath.mkdirs())
    return true; //happy time2 : because It's is goal.

//now we have trouble.
//itemPath is not directory and can not make that folder.

这可能意味着几件事:

  1. 这是一个文件。
  2. 您没有父目录的写入权限。
  3. 父级不是目录。
  4. 所以:

    if(parent.isDirectory()){
        if(itemPath.isFile()){
            if(itemPath.delete() == false){
                return false;
    

    这是item是一个文件,parent是一个目录,你没有对该文件或可能的目录的写访问权。

            }
        }else{
            //This is the spot where I stocked.
    

    此时,父项是目录,项目不是文件,因此它不存在,并且您无法在上面创建它,因此您可能没有父目录的写入权限。

            sendDownloadErrorLog("failed!!");
            return false;  //check point!!!
        }
    }else{
        return false;// parent is't folder!! How I can handle this!
    

    你不能,你不应该处理这个。这是用户错误或配置问题。没有什么可以尝试和编码。

    //once more try make folder (because we try to delete same name file
    return itemPath.mkdirs();
    

    我会说你过于复杂了。如果你应该创建一个目录而你不能因为该名称的文件已经存在,那可能是用户方面的错误,。告诉他。你不应该通过删除文件做出反应,这不是你的业务,为什么它在那里。同样,如果您没有写访问权限,那就是它的结束。你什么都做不了。我会减少整个事情:

    return itemPath.mkdirs();