Java中mkdir()和mkdirs()的區(qū)別及說明
mkdir()和mkdirs()的區(qū)別
boolean mkdir()
: 創(chuàng)建此抽象路徑名指定的目錄。
boolean mkdirs()
: 創(chuàng)建此抽象路徑名指定的目錄,包括創(chuàng)建不存在的父目錄。
mkdir
:只能用來創(chuàng)建文件夾,且只能創(chuàng)建一級目錄,如果上級不存在,就會(huì)創(chuàng)建失敗。
mkdirs
:只能用來創(chuàng)建文件夾,且能創(chuàng)建多級目錄 ,如果上級不存在,就會(huì)自動(dòng)創(chuàng)建。(創(chuàng)建文件夾多用此)
Java的mkdir()與mkdirs()引發(fā)的悲劇---java的mkdir()方法無法創(chuàng)建文件目錄
昨晚深夜在做項(xiàng)目的文件上傳,在上傳之前要先判斷指定的文件目錄是否存在,如果不存在就先創(chuàng)建改目錄。
因?yàn)橹耙呀?jīng)做過類似的功能了,所以就把判斷文件目錄以及創(chuàng)建的代碼直接copy過來了,然而很郁悶的是,一模一樣的代碼,這回卻遇到一個(gè)特別奇葩的問題:
我要判斷的文件目錄
ServletContext context = ServletActionContext.getServletContext(); // 獲得當(dāng)前web應(yīng)用所在目錄下file文件夾的絕對路徑 String path = context.getRealPath("/CloudSpaceFile/CustomerFile/" + customerName + "/" + typesName + "/"); File f = new File(path);// 判斷文件夾是否存在,如果不存在就創(chuàng)建 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("假的的//"); }
我之前做的目錄判斷、創(chuàng)建等功能的代碼
ServletContext context = ServletActionContext.getServletContext(); // 獲得當(dāng)前web應(yīng)用所在目錄下file文件夾的絕對路徑 String path = context .getRealPath("/CloudSpaceFile/ResourceFile/SystemApplication/" + typesName + "/"); //System.out.println("editCustApplicaAction.add()+++++++++++++++++++"+path); File f = new File(path);// 判斷文件夾是否存在,如果不存在就創(chuàng)建 if (!f.exists()) { f.mkdir(); }
因?yàn)槭橇璩苛?,宿舍斷網(wǎng)了,所以不能查找想要的知識(shí),只能自己琢磨出現(xiàn)這種問題的原因,結(jié)果搞了大半天也沒弄清楚原因。
現(xiàn)在查找了資料才知道問題所在:
其中第二次的customerName以及typesName是用戶的用戶名以及他所選擇的文件名,其中 customerName 這個(gè)文件目錄之上的目錄已經(jīng)存在的,也就是說,我現(xiàn)在要判斷“****/CloudSpaceFile/CustomerFile/” 這個(gè)目錄下的 customerName 這個(gè)文件夾是否存在,以及customerName這個(gè)文件夾下面的typesName這個(gè)文件夾也是否存在(也就是說,這里有可能要?jiǎng)?chuàng)建多層目錄)。
而第一次的的“****/CloudSpaceFile/CustomerFile/”目錄已經(jīng)存在了,要判斷的是“typesName”這個(gè)目錄是否存在,也就是說這里只要?jiǎng)?chuàng)建一層目錄。
問題就出在這里?。。。?/strong>
我用創(chuàng)建單層目錄的mkdir()方法去創(chuàng)建多層目錄?。。?/p>
知道問題所在以后就容易解決了:
只要把調(diào)用的方法mkdir()改為mkdirs()就行了。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java Collection集合遍歷運(yùn)行代碼實(shí)例
這篇文章主要介紹了Java Collection集合遍歷運(yùn)行代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04Java 數(shù)據(jù)結(jié)構(gòu)線性表之順序存儲(chǔ)詳解原理
線性表的順序存儲(chǔ)是指用一組地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)線性表中的各個(gè)元素、使得線性表中在邏輯結(jié)構(gòu)上相鄰的數(shù)據(jù)元素存儲(chǔ)在相鄰的物理存儲(chǔ)單元中,即通過數(shù)據(jù)元素物理存儲(chǔ)的相鄰關(guān)系來反映數(shù)據(jù)元素之間邏輯上的相鄰關(guān)系2021-10-10Java常見基本數(shù)據(jù)結(jié)構(gòu)概覽
這篇文章主要介紹了Java常見的幾種基本數(shù)據(jù)結(jié)構(gòu),包括其含義和用法,,需要的朋友可以參考下2017-09-09簡單工廠模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了簡單工廠模式的相關(guān)資料,和大家一起學(xué)習(xí)靜態(tài)工廠方法模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08