Java的mkdir()與mkdirs()引發的悲劇---關於java的mkdir()方法無法建立檔案目錄失敗問題
阿新 • • 發佈:2018-11-08
昨晚深夜在做專案的檔案上傳,在上傳之前要先判斷指定的檔案目錄是否存在,如果不存在就先建立改目錄。
因為之前已經做過類似的功能了,所以就把判斷檔案目錄以及建立的程式碼直接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()就行了。