mkdirs php失败,mkdirs() 总失败,怎么办,多半...

本文记录了在Android开发中遇到的创建文件夹失败的问题,详细分析了mkdirs()方法返回false的原因,包括权限、多线程、父目录存在性等,并提供了检查并删除不可见父文件夹的解决方案,确保文件夹成功创建。
摘要由CSDN通过智能技术生成

6e102000f120

老家的绿

今天 2017年3月29日21:24:06 遇到一个创建文件夹的坑,打个Log记录一下。

原因

在父文件夹下建一文件夹

File parentFile = new File("parentFile");

File childFile = new File(parentFile, "childFile");

if (!childFile.exists()) {

boolean mkdirs = childFile.mkdirs();

Log.d(TAG, "mkdirs = " + mkdirs);

}

很简单吧,可mkdirs 总返回false,建立不了,日了个xx

摸索

一步步排查吧

权限 ok

mkdir ; mkdirs 傻傻分不清?

简单来说:mkdir先有爸爸,再有我,慢慢来;mkdirs 一步到位。

这里用 mkdirs 是没问题的。

多线程,不存在的。

如果业务需要考虑多线程的情况,不要担心,一 synchronized 下去还让你皮。

还是不行,考虑下同名的问题。

怎么说:坑就这这里,有些文件夹并不是你看不见了他就不存在了。代码才是验证真理的唯一标准:

boolean parentFileExists = parentFile.exists();

Log.d(TAG, "parentFileExists = " + parentFileExists);

验证下父文件夹是否存在,有时因为各种原因,磁盘中已有了parentFile,但是不可见。

总结

如果父文件夹存在,手气刀落,删了。

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:我这里业务是这样的,代码是死的,您的思想是活的。

欢迎斧正,交流。O(∩_∩)O谢谢

补充

2017年3月30日20:55:28:

还有个方法,事先判断 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();

}

}

}

补充2

2017年3月31日09:39:29

在 stackoverflow 发现这样一个问答,很有启发:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值