java.io.File檔案操作容易失誤的兩點--mkdirs()、刪除目錄
阿新 • • 發佈:2019-02-18
在最近的使用到的java.io.File中,忽然產生一個新奇的bug:
程式正確執行後,為了優化儲存檔案的位置,將類似./json/的目錄改成./data/json/後,程式執行異常,排查原因後發現是./data/json/路徑沒有被建立導致在這個路徑下建立檔案file.createNewFile()失敗,但是明顯在程式碼裡有控制在不存在路徑的情況下會建立目錄。
File jsonDir = new File(jsonPath);//./json/的目錄改成./data/json/ if (!jsonDir.exists()) { jsonDir.mkdir(); //原因是mkdir是建立單程目錄,如果是多層目錄需要存在父目錄才能建立最後一層 } //在這個路徑下建立檔案 File file = new File(jsonPath + "zml.json"); file.createNewFile();
自此,Java語言關於檔案操作的這個容易漏而又重要的點--s的重要, 才被我知道:
mkdirs()是建立目錄(含多層,但無論父目錄是否存在)
mkdir()是建立單層目錄或者父目錄存在的多級目錄的最後一層目錄
在java.io.File裡還有一個容易忽略的點:
對目錄刪除不能是一條語句搞定的,而是應該獲取這個目錄下的檔案listFiles()後遍歷刪除再刪除目錄dir.delete()。
File dir = new File(jsonPath); //刪除所有 先刪除目錄下的內容,才能刪除目錄 if (dir.exists() && dir.isDirectory()) { File[] fileArray = dir.listFiles();//獲取目錄下的所有檔案 for (File file : fileArray) { file.delete(); } dir.delete(); }