【发布时间】:2016-03-11 16:58:24
【问题描述】:
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();
}
我在下载一些文件之前制作文件夹时使用了此代码。 这段代码真的很好用,但不是每次都有效。 很少有人报告我在那个地方“失败”了! (检查点!)
- 我检查了 dest 文件夹是否存在。
- 我尝试创建 dest 文件夹。
- 我检查了 dest 的父级类型(文件夹与否)
- 我尝试删除与 dest 文件夹同名的文件。 (如果存在)
- 最后,再次尝试创建一个 dest 文件夹。
但有时第 4 步会失败。 itemPath(dest 文件夹) 不存在。 itemPath 无法弥补。 itemPath 的父级存在,她是文件夹。 没有与 itemPath 同名的文件。 那么为什么 File.mkdirs 不能制作 destFolder?
有什么逻辑漏洞吗?
请告诉我。
【问题讨论】:
-
一般编程技巧:
Functions should have a single exit point。见:tomdalling.com/blog/coding-tips/… -
@Fran N.Stein 感谢您的建议。 :D