淺析node中的常用模塊:path模塊和fs模塊

在node中還有很多內置對象, 可以幫助我們進行很多操作, 包括對路徑、文件等操作 。 下面本篇文章給大家介紹一下node常用內置模塊中的path模塊和fs模塊, 希望對大家有所幫助!

淺析node中的常用模塊:path模塊和fs模塊

文章插圖

path模塊path模塊用于對路徑和文件進行處理, 提供了很多方法 。
path.resolve有一個需求是將路徑和文件名進行拼接 。
const basePath = '/user/why'const filename = 'abc.txt'那么有人會使用字符串拼接的方式進行拼接 。
const filePath = basePath + '/' + filenameconsole.log(filePath);這樣的結果雖然沒有問題, 但是考慮到不同的系統, windows系統可以使用\或者\\或者/作為路徑分隔符, 而Mac OS、Linux的Unix操作系統使用/作為路徑分隔符 。
淺析node中的常用模塊:path模塊和fs模塊

文章插圖

解決上述問題, 我們可以使用path.resolve來進行路徑的拼接 。
const path = require('path')const basePath = '/user/why'const filename = 'abc.txt'const filePath = path.resolve(basePath, filename)console.log(filePath);
淺析node中的常用模塊:path模塊和fs模塊

文章插圖

從路徑中獲取信息
    dirname:獲取文件的父文件夾basename:獲取文件名extname:獲取文件擴展名
const path = require('path')const filePath = '/User/haha/abc.txt'console.log(path.dirname(filePath));console.log(path.basename(filePath));console.log(path.extname(filePath));
淺析node中的常用模塊:path模塊和fs模塊

文章插圖

路徑拼接如果我們想要把多個路徑進行拼接, 但是不同的操作系統可能使用不同的分隔符, 我們可以使用path.join函數 。
const path = require('path')const basepath = '/User/haha'const filename = 'abc.txt'const filePath = path.join(basepath, filename)console.log(filePath);
淺析node中的常用模塊:path模塊和fs模塊

文章插圖

將文件和某個文件夾拼接如果我們想要將某個文件和文件夾拼接, 可以使用path.resolve 。
const basepath = 'User/haha'const filename = 'abc.txt'
淺析node中的常用模塊:path模塊和fs模塊

文章插圖

path.resolve和path.join一樣也可以進行路徑的拼接, 那么它們的區別是什么呢?
const basepath = '../User/haha'const filename = './abc.txt'const othername = './haha.js'const filePath1 = path.join(basepath, filename, othername)console.log(filePath1);const filePath2 = path.resolve(basepath, filename, othername)console.log(filePath2);我們可以看到它們的差別 。
淺析node中的常用模塊:path模塊和fs模塊

文章插圖

fs模塊nodejs文件系統的API大都提供三種操作方式:
    同步操作文件:代碼會被阻塞, 不會繼續執行
    異步回調函數操作文件:代碼不會被阻塞, 需要傳入回調函數, 當獲取到結果時, 回調函數執行
    異步Promise操作文件:代碼不會被阻塞, 通過fs.promises調用方法操作, 會返回一個Promise, 可以通過then、catch進行處理 。
讀取文件狀態(信息)方式一 同步操作:fs.statSync
const fs = require('fs')const filepath = './abc.txt'const info = fs.statSync(filepath)console.log('后續需要執行的代碼');console.log(info);
淺析node中的常用模塊:path模塊和fs模塊

文章插圖

方式二 異步操作
fs.stat(filepath, (err, info) => { if(err) { console.log(err); return } console.log(info); console.log(info.isFile()); // 判斷是否是一個文件 console.log(info.isDirectory()); // 判斷是否是一個文件夾})console.log('后續需要執行的代碼');方式三: Promise
fs.promises.stat(filepath).then(info => { console.log(info);}).catch(err => { console.log(err);})console.log('后續需要執行的代碼');文件描述符node為所有打開的文件分配了一個數字型的文件描述符 。 所有文件系統操作都使用這些文件描述符來標識和跟蹤每個特定的文件 。
fs.open()方法用于分配新的文件描述符fd 。 一旦被分配, 則文件描述符可用于從文件讀取數據、向文件寫入數據、或請求關于文件的信息 。
const fs = require('fs')fs.open('./abc.txt', (err, fd) => { if(err) { console.log(err); return } // 通過文件描述符去獲取文件信息 fs.fstat(fd, (err, info) => { console.log(info); })})

推薦閱讀