首页 存档 技术 查看内容

一个字母引发的血案 java.io.File中mkdir()和mkdirs()

2018-3-30 13:00 |来自: 互联网 319 0

摘要: 官方微博:动力节点 来源:博客园精华区 一个字母引发的血案 马上放年假了,临放假前有个爬虫的任务,其中需要把网络图片保存到本地,很简单,马上写完了代码: //省略部分代码... Long fileId= (Long) data.get( ...

官方微博:动力节点

来源:博客园精华区

一个字母引发的血案


马上放年假了,临放假前有个爬虫的任务,其中需要把网络图片保存到本地,很简单,马上写完了代码:


//省略部分代码...
   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
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部