閱讀目錄
一:理解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); // 輸出 ''