Java中mkdir()和mkdirs()的区别及说明
作者:八戒,你又涨价了哎
mkdir()和mkdirs()的区别
boolean mkdir()
: 创建此抽象路径名指定的目录。
boolean mkdirs()
: 创建此抽象路径名指定的目录,包括创建不存在的父目录。
mkdir
:只能用来创建文件夹,且只能创建一级目录,如果上级不存在,就会创建失败。
mkdirs
:只能用来创建文件夹,且能创建多级目录 ,如果上级不存在,就会自动创建。(创建文件夹多用此)
Java的mkdir()与mkdirs()引发的悲剧---java的mkdir()方法无法创建文件目录
昨晚深夜在做项目的文件上传,在上传之前要先判断指定的文件目录是否存在,如果不存在就先创建改目录。
因为之前已经做过类似的功能了,所以就把判断文件目录以及创建的代码直接copy过来了,然而很郁闷的是,一模一样的代码,这回却遇到一个特别奇葩的问题:
我要判断的文件目录
ServletContext context = ServletActionContext.getServletContext(); // 获得当前web应用所在目录下file文件夹的绝对路径 String path = context.getRealPath("/CloudSpaceFile/CustomerFile/" + customerName + "/" + typesName + "/"); File f = new File(path);// 判断文件夹是否存在,如果不存在就创建 if (!f.exists()) { f.mkdir(); System.out.println("editCustApplicaAction.add()文件夹不存在------------"+f); } boolean t = f.exists(); if (t == true) { System.out.println("真的//"); }else { System.out.println("假的的//"); }
我之前做的目录判断、创建等功能的代码
ServletContext context = ServletActionContext.getServletContext(); // 获得当前web应用所在目录下file文件夹的绝对路径 String path = context .getRealPath("/CloudSpaceFile/ResourceFile/SystemApplication/" + typesName + "/"); //System.out.println("editCustApplicaAction.add()+++++++++++++++++++"+path); File f = new File(path);// 判断文件夹是否存在,如果不存在就创建 if (!f.exists()) { f.mkdir(); }
因为是凌晨了,宿舍断网了,所以不能查找想要的知识,只能自己琢磨出现这种问题的原因,结果搞了大半天也没弄清楚原因。
现在查找了资料才知道问题所在:
其中第二次的customerName以及typesName是用户的用户名以及他所选择的文件名,其中 customerName 这个文件目录之上的目录已经存在的,也就是说,我现在要判断“****/CloudSpaceFile/CustomerFile/” 这个目录下的 customerName 这个文件夹是否存在,以及customerName这个文件夹下面的typesName这个文件夹也是否存在(也就是说,这里有可能要创建多层目录)。
而第一次的的“****/CloudSpaceFile/CustomerFile/”目录已经存在了,要判断的是“typesName”这个目录是否存在,也就是说这里只要创建一层目录。
问题就出在这里!!!:
我用创建单层目录的mkdir()方法去创建多层目录!!!
知道问题所在以后就容易解决了:
只要把调用的方法mkdir()改为mkdirs()就行了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。