理解Path對路徑進行操作的API
閱讀目錄
回到頂部一:理解normalize方法
該方法將非標準路徑字串轉換為標準路徑字串,在轉換過程中執行如下處理:
1. 解析路徑字串中的 '..' 字串與 '.' 字串,返回解析後的標準路徑。
2. 將多個斜槓字串轉換為一個斜槓字串,比如將 '\\' 轉換為 '\'。
3. 將windows作業系統中的反斜槓字串轉換為正斜槓字串。
4. 如果路徑字串以斜槓字串結尾,則在轉換後的完整路徑字串末尾保留該斜槓字串。
該方法使用如下所示:
path.normalize(path);
在該方法中,使用一個引數path,該引數值為需要被轉換的路徑字串。該方法返回被轉換後的路徑字串。
下面我們在專案中根目錄下建立一個a子目錄,在a子目錄下新建一個b子目錄,然後在b子目錄下新建一個message.txt, 內容為:我喜歡編寫程式碼,我們將使用normalize方法解析 './/a//b//d//..//c/e//..//'路徑字串,解析該路徑後,並且讀取message.txt檔案的內容,如下程式碼:
const fs = require('fs');
const path = require('path');
const myPath = path.normalize('.//a//b//d//../e//..//');
console.log(myPath); // 輸出 a/b/
const file = fs.createReadStream(myPath + 'message.txt');
file.on('data', (data) => { console.log(data.toString()); // 輸出 我喜歡編寫程式碼 });
輸出如下所示:
回到頂部二:理解join方法
該方法將多個引數值字串結合為一個路徑字串,使用方式如下所示:
path.join([path1], [path2], [...]);
在該方法中,使用一個或多個字串值引數,該方法返回將這些字串值引數結合而成的路徑字串。
請看如下demo, 在專案的根目錄下有 a/b/message.txt, 內容還是為 '我喜歡編寫程式碼', 請看如下程式碼:
const fs = require('fs'); const path = require('path'); const myPath = path.join(__dirname, 'a', 'b'); console.log(myPath); const file= fs.createReadStream(myPath + '/message.txt'); file.on('data', (data) => { console.log(data.toString()); });
輸出如下所示:
回到頂部三:理解dirname方法
該方法用於獲取一個路徑中的目錄名,使用方法如下所示:
path.dirname(p);
該方法使用一個引數,引數值為一個路徑,可以是相對路徑、絕對路徑、也可以為一個目錄的路徑、也可以是一個檔案的路徑。
當引數值為目錄的路徑時:該方法返回該目錄的上層目錄。
當引數值為檔案路徑時:該方法返回該檔案所在的目錄。
請看如下demo:
const path = require('path'); // 指定相對目錄路徑 const a = path.dirname('./a/b/c/d'); console.log(a); // 輸出 ./a/b/c // 指定相對檔案路徑 const b = path.dirname('./a/b/c/d/message.txt'); console.log(b); // 輸出 ./a/b/c/d // 指定絕對目錄路徑 const c = path.dirname('/a/b/c/d'); console.log(c); // 輸出 /a/b/c // 指定絕對檔案路徑 const d = path.dirname('/a/b/c/d/message.txt'); console.log(d); // 輸出 /a/b/c/d回到頂部
四:理解basename方法
該方法用於獲取一個路徑中的檔名,使用方式如下所示:
path.basename(p, [ext]);
在該方法中,使用兩個引數,p引數為必須的引數,它必須為一個檔案的完整路徑,可以是相對路徑,也可以是一個絕對路徑。
ext是可選引數,該引數的作用是在方法返回的檔名中去除該檔案的副檔名。請看如下所示的基本程式碼:
const path = require('path'); // 預設返回檔名 index.html const a = path.basename('/a/b/c/d/index.html'); console.log(a); // 輸出 index.html // 返回index.html後,去除.html副檔名,因此會返回 index const b = path.basename('./a/b/c/d/index.html', '.html'); console.log(b); // 輸出 index // 返回index.html後,去除html的副檔名,因此會返回 index. const c = path.basename('./a/b/c/d/index.html', 'html'); console.log(c); // 輸出 index. // 如果副檔名不存在的話,什麼都不去除 const d = path.basename('./a/b/c/d/index.html', 'ejx'); console.log(d); // 輸出 index.html回到頂部
五:理解extname方法
該方法用於獲取一個路徑中的副檔名,使用方法如下所示:
path.extname(p);
在該方法中,使用一個引數p,引數p必須為一個檔案的完整路徑,可以為相對路徑,也可以為絕對路徑,在該引數值中指定檔案的副檔名(以'.'開始),當引數值中指定的檔案沒有指定副檔名時,會返回一個空字串。
比如如下程式碼:
const path = require('path'); const a = path.extname('/a/index.html'); console.log(a); // 輸出 '.html' const b = path.extname('/a/index.'); console.log(b); // 輸出 '.' const c = path.extname('/a/index'); console.log(c); // 輸出 ''