1. 程式人生 > >java.io.File檔案操作容易失誤的兩點--mkdirs()、刪除目錄

java.io.File檔案操作容易失誤的兩點--mkdirs()、刪除目錄

在最近的使用到的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();
        }