問題があります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 を作成できないのでしょうか?
論理的な穴はありますか?
私にお知らせください。