1. 程式人生 > >Java的mkdir()與mkdirs()引發的悲劇---關於java的mkdir()方法無法建立檔案目錄失敗問題

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()就行了。