createnewfile和mkdirs有什么不同?搞懂区别才能用对!

吉云

哥们儿几个,今天捣鼓代码的时候遇到个小坎,关于那个 createNewFile 的用法,琢磨了一阵子,记录一下过程,省得下次又忘了。

起因是这样的

我当时在写个小程序,需要把一些临时生成的数据存到本地一个文件里去。想着这不简单嘛直接用 createNewFile 就行了,指定好路径和文件名,比如想在 `D:\tempdata\logs\` 这个目录下创建一个叫 `*` 的文件。

createnewfile和mkdirs有什么不同?搞懂区别才能用对!

动手试试

我就撸起袖子开始写了,大概就是创建了一个文件对象,指向 `D:\tempdata\logs\*`,然后直接调用了它的 createNewFile 方法。想着运行一下,文件就该出来了。

结果?程序跑完了,没报错,但是去 `D:\tempdata\logs\` 目录下一看,空的!啥也没有。这就怪了,我寻思这方法不是创建文件的吗?咋没动静。

琢磨琢磨

我试着直接在 `D:\` 根目录下创建 `*`,欸,这回成功了!文件确实生成了。这就让我纳闷了,难道是路径的问题?

我回过头去看那个失败的路径 `D:\tempdata\logs\*`,发现一个事儿:我电脑上压根就没 `tempdata` 这个文件夹,更别说它里面的 `logs` 文件夹了。难道 createNewFile 不会自动创建不存在的爹目录吗?

赶紧查了查(当然不是现在查,是当时),发现果然是这样!createNewFile 这哥们挺实在,它只负责创建那个最终的文件,前提是它爹、它爷爷那些文件夹必须已经存在了。如果路径中任何一级文件夹不存在,它就撂挑子不干了,而且会返回个 `false`,告诉你“我没成功”。

createnewfile和mkdirs有什么不同?搞懂区别才能用对!

找到门路了

这时候我想起另外两个命令,好像叫 mkdirmkdirs。印象里这俩是搞文件夹的。

简单来说:

  • mkdir:这家伙是创建单层文件夹的。比如你想创建 `D:\tempdata`,如果 `D:\` 存在,它就能成功。但如果你想直接用它创建 `D:\tempdata\logs`,而 `D:\tempdata` 不存在,它也干不了。
  • mkdirs:这个就比较猛了,它是创建多层文件夹。你想创建 `D:\tempdata\logs`,就算 `tempdata` 和 `logs` 都不存在,它会帮你一层一层地都创建只要你有权限,它就能给你整出来。
  • createnewfile和mkdirs有什么不同?搞懂区别才能用对!

豁!原来是这样!

解决问题

那解决办法就清楚了。在我调用 createNewFile 之前,得先确保它爹目录(也就是 `D:\tempdata\logs`)是存在的。最稳妥的办法就是用 mkdirs

正确的流程应该是:

1. 先获取文件路径中的目录部分,比如 `D:\tempdata\logs`。

createnewfile和mkdirs有什么不同?搞懂区别才能用对!

2. 对这个目录路径调用 mkdirs 方法。这家伙会确保这条路上的所有文件夹都存在,如果已经存在了,它也不会报错,挺

3. 然后,再对完整的文件路径 `D:\tempdata\logs\*` 调用 createNewFile 方法。

这么一改,代码跑起来,文件果然乖乖地出现在了指定的位置!

总结一下

这几个哥们分工明确:

    createnewfile和mkdirs有什么不同?搞懂区别才能用对!

  • createNewFile:专门负责一步,临门一脚创建文件,但前提是路必须铺好(文件夹必须存在)。
  • mkdir:铺路,但一次只能铺一层(创建单级文件夹)。
  • mkdirs:大力出奇迹,负责把整条路都铺好(创建多级文件夹),不管中间缺了多少层。

以后要创建文件,特别是路径比较深或者不确定父目录存不存在的时候,记得先用 mkdirs 开路,再用 createNewFile 放文件。这回实践算是把这个小坑给填上了,分享给大家,希望有点用。

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]