一个字母引发的血案 java.io.File中mkdir()和mkdirs()_0
来源:互联网 发布:怎么做社交软件 编辑:程序博客网 时间:2024/05/16 04:46
一个字母引发的血案
明天开始放年假了,临放假前有个爬虫的任务,其中需要把网络图片保存到本地,很简单,马上写完了代码:
//省略部分代码... Long fileId= (Long) data.get("FilmId"); File filmpath= new File(path+fileId); if (!filmpath.exists()) filmpath.mkdir(); //省略部分代码... OutputStream os = new FileOutputStream(path+fileId+"\\"+id+".jpg");
跑起来发现突然爆出如下错误:
java.io.FileNotFoundException: E:\data\Pic\21324900\2415585464.jpg (系统找不到指定的路径。)
看到这个错误马上打开本地文件夹,看一眼路径是否存在,一看不存在,马上开始打断点排查问题,结果发现把filmpath.mkdirs() 写成了filmpath.mkdir()
一直用mkdirs()缺忽略了还有一个mkdir(),这两个到底有什么区别呢?
mkdirs() 与 mkdir() 不同
官方文档给的解释是:
boolean mkdir() 创建此抽象路径名指定的目录。
boolean mkdirs() 创建此抽象路径名指定的目录,包括所有必需但不存在的父目录。
我通过Demo通俗的解释一下:
String path ="E:\\data\\a\\b\\c"; Boolean result = new File(path).mkdir(); System.out.println(result);
当c的父目录存在时 返回true
当c的父目录不存在时 返回false
String path ="E:\\data\\a\\b\\c"; Boolean result = new File(path).mkdirs(); System.out.println(result); System.in.read();
当c父的目录不存在时,mkdirs会创建父目录 返回true
mkdirs 源码
public boolean mkdirs() { if (exists()) { return false; } if (mkdir()) { return true; } File canonFile = null; try { canonFile = getCanonicalFile(); } catch (IOException e) { return false; } File parent = canonFile.getParentFile(); return (parent != null && (parent.mkdirs() || parent.exists()) && canonFile.mkdir()); }
- 判断目录是否存在,目录存在返回 false
- 调用mkdir()创建目录,创建成功返回 true
- getCanonicalFile我们不知道这个是干嘛的,查了一下文档,获取 规范路径名字符串
- 获取父目录 递归调用
教训
- 写代码时要认真
- 基础知识要学的扎实
- 做事要有准备,现在开始准备下班放假~~
0 0
- 一个字母引发的血案 java.io.File中mkdir()和mkdirs()_0
- 一个字母引发的血案 java.io.File中mkdir()和mkdirs
- 一个字母引发的血案 java.io.File中mkdir()和mkdirs()
- java.io.file 中mkdir和mkdirs的区别
- java.io.File mkdir() 和 mkdirs()的差别
- java 中的renameTO/java.io.File中mkdir和mkdirs的区别
- java.io.File中mkdir()和mkdirs()的区别
- java.io.File中mkdir()和mkdirs()的区别
- java.io.File中mkdir()和mkdirs()的区别
- Java中File类mkdir和mkdirs的区别
- File中mkdir()和mkdirs()的区别
- java.io.File类中mkdir()与mkdirs()区别
- java.io.File类中mkdir()与mkdirs()区别
- java.io.File类中mkdir()与mkdirs()区别
- java.io.File中的mkdir() 和 mkdirs() 方法区别
- File的mkdir() 和 mkdirs()
- File的mkdir() 和 mkdirs()
- File的mkdir() 和 mkdirs()
- JavaScript单元测试入门
- 设备驱动中的并发控制 (1)
- SpringMVC接受参数的几种方式
- 2016年终总结
- GitHub上传本地项目代码
- 一个字母引发的血案 java.io.File中mkdir()和mkdirs()_0
- ionic grid(栅格) 九宫格
- LeetCode 372. Super Pow (快速幂取模)
- 关于Executor框架相关接口和类的作用
- 内存学习(一)权限修饰符
- 【WPF】关于弹窗:非模式对话框
- 流媒体协议—HTTP
- BZOJ 1064: [Noi2008]假面舞会 图论, BFS, 脑洞
- 指针学习笔记