老家的綠
今天 2017年3月29日21:24:06 遇到一個(gè)創(chuàng)建文件夾的坑矾端,打個(gè)Log記錄一下。
原因
在父文件夾下建一文件夾
File parentFile = new File("parentFile");
File childFile = new File(parentFile, "childFile");
if (!childFile.exists()) {
boolean mkdirs = childFile.mkdirs();
Log.d(TAG, "mkdirs = " + mkdirs);
}
很簡(jiǎn)單吧秩铆,可mkdirs 總返回false殴玛,建立不了柒凉,日了個(gè)xx
摸索
一步步排查吧
- 權(quán)限 ok
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-
mkdir
;mkdirs
傻傻分不清坦刀?
簡(jiǎn)單來(lái)說(shuō):mkdir
先有爸爸,再有我沐寺,慢慢來(lái)盖奈;mkdirs
一步到位钢坦。
這里用mkdirs
是沒(méi)問(wèn)題的。 - 多線程厨诸,不存在的禾酱。
如果業(yè)務(wù)需要考慮多線程的情況颤陶,不要擔(dān)心滓走,一synchronized
下去還讓你皮。 - 還是不行疫粥,考慮下同名的問(wèn)題腰懂。
怎么說(shuō):坑就這這里绣溜,有些文件夾并不是你看不見(jiàn)了他就不存在了怖喻。代碼才是驗(yàn)證真理的唯一標(biāo)準(zhǔn):
boolean parentFileExists = parentFile.exists();
Log.d(TAG, "parentFileExists = " + parentFileExists);
驗(yàn)證下父文件夾是否存在岁诉,有時(shí)因?yàn)楦鞣N原因,磁盤中已有了parentFile
哗蜈,但是不可見(jiàn)距潘。
總結(jié)
如果父文件夾存在,手氣刀落俭尖,刪了洞翩。
File parentFile = new File("parentFile");
File childFile = new File(parentFile, "childFile");
if (!childFile.exists()) {
boolean mkdirs = childFile.mkdirs();
Log.d(TAG, "mkdirs = " + mkdirs);
if(!mkdirs) { // 如果 建立文件夾失敗 將父文件夾刪除
if(parentFile.exists()) {
parentFile.delete();
}
}
}
ps:我這里業(yè)務(wù)是這樣的骚亿,代碼是死的循未,您的思想是活的。
歡迎斧正绣檬,交流娇未。O(∩_∩)O謝謝
補(bǔ)充
2017年3月30日20:55:28:
還有個(gè)方法星虹,事先判斷 ta 的父文件夾是否存在
File parentFile = new File("parentFile");
File childFile = new File(parentFile, "childFile");
if (!childFile .getParentFile().exists()) { // 事先判斷 ta 的父文件夾是否存在
boolean mkdirs = childFile .getParentFile().mkdirs();
Log.w(TAG, "SDCardUtil{} ... makedirs() --> file = " + file.getParentFile().getAbsolutePath() + " ;mkdirs = " + mkdirs);
}
if (!childFile.exists()) {
boolean mkdirs = childFile.mkdirs();
Log.d(TAG, "mkdirs = " + mkdirs);
if(!mkdirs) { // 如果 建立文件夾失敗 將父文件夾刪除
if(parentFile.exists()) {
parentFile.delete();
}
}
}
補(bǔ)充2
2017年3月31日09:39:29
在 stackoverflow 發(fā)現(xiàn)這樣一個(gè)問(wèn)答平夜,很有啟發(fā):
- android - "Result of method is ignored"- what does this imply? - Stack Overflow - http://stackoverflow.com/questions/38967366/result-of-method-is-ignored-what-does-this-imply