官方解釋:
fs
模塊提供了一個 API,用於以模仿標準 POSIX 函數的方式與文件系統進行交互。
要使用此模塊:
const fs = require('fs');
所有文件系統操作都具有同步和異步的形式。
異步的形式總是將完成回調作爲其最後一個參數。 傳給完成回調的參數取決於具體方法,但第一個參數始終預留用於異常。 如果操作成功完成,則第一個參數將爲 null
或 undefined
。
使用同步的操作發生的異常會立即拋出,可以使用 try
/catch
處理,也可以允許冒泡。
fs.readFile 讀取文件
注意:一般我們都會採用異步讀取數據,如果採用同步,在高併發的情況下,會將請求堵塞。
fs.writeFile():
異步地將數據寫入到一個文件,如果文件已存在則覆蓋該文件。 data
可以是字符串或 buffer。
如果 data
是一個 buffer,則 encoding
選項會被忽略。
在同一個文件上多次使用 fs.writeFile()
且不等待回調是不安全的。 對於這種情況,建議使用 fs.createWriteStream()
。
fs.Stats
類:
fs.Stats
對象提供有關文件的信息。
從 fs.stat()
、fs.lstat()
和 fs.fstat()
及其同步方法返回的對象都屬於此類型。 如果傳給這些方法的 options
中的 bigint
爲 true,則數值將爲 bigint
型而不是 number
型。
fs.rename():
異步地將 oldPath
上的文件重命名爲 newPath
提供的路徑名。 如果 newPath
已存在,則覆蓋它。 除了可能的異常,完成回調沒有其他參數。
fs.unlink():
異步地刪除文件或符號鏈接。 除了可能的異常,完成回調沒有其他參
fs.readdir():
讀取目錄的內容。 回調有兩個參數 (err, files)
,其中 files
是目錄中的文件名的數組(不包括 '.'
和 '..'
)。
可選的 options
參數可以是指定編碼的字符串,也可以是具有 encoding
屬性的對象,該屬性指定用於傳給回調的文件名的字符編碼。 如果 encoding
設置爲 'buffer'
,則返回的文件名是 Buffer
對象。
fs.mkdir():
異步地創建目錄。 除了可能的異常,完成回調沒有其他參數。
fs.rmdir():刪除文件夾(詳見node官方文檔)
fs.watch():監聽文件夾變化(詳見node官方文檔)
fs.createReadStream():讀取文件流(詳見node官方文檔)
fs.createWriteStream():寫入文件流(詳見node官方文檔)
util.promisify(original)
讓一個遵循異常優先的回調風格的函數, 即 (err, value) => ...
回調函數是最後一個參數, 返回一個返回值是一個 promise 版本的函數。
例如:
const util = require('util');
const fs = require('fs');
const stat = util.promisify(fs.stat);
stat('.').then((stats) => {
// Do something with `stats`
}).catch((error) => {
// Handle the error.
});
或者,使用async function
獲得等效的效果:
const util = require('util');
const fs = require('fs');
const stat = util.promisify(fs.stat);
async function callStat() {
const stats = await stat('.');
console.log(`This directory is owned by ${stats.uid}`);
}
如果原本就有 original[util.promisify.custom]
屬性, promisify
會返回它的值, 查閱 Custom promisified functions.
promisify()
會在所有情況下假定 original
是一個最後的參數是回調函數的函數,如果它不是,那麼返回的函數的返回值爲 undefined。