理解Path對路徑進行操作的API

龍恩0707發表於2018-11-11

閱讀目錄

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

相關文章