深入Nodejs模組fs 檔案系統操作

2022-06-26 14:21:13 字數 2594 閱讀 4991

node 的fs文件密密麻麻的 api 非常多,畢竟全面支援對檔案系統的操作。文件組織的很好,操作基本分為檔案操作、目錄操作、檔案資訊、流這個大方面,程式設計方式也支援同步、非同步和 promise。

本文記錄了幾個文件中沒詳細描寫的問題,可以更好地串聯fs文件思路:

檔案描述符是乙個非負整數。它是乙個索引值,作業系統可以根據它來找到對應的檔案。

在 fs 的很多底層 api 中,需要用到檔案描述符。在文件中,描述符通常用fd來代表。例如:fs.read(fd, buffer, offset, length, position, callback)。與這個 api 相對應的是:fs.readfile(path[, options], callback)

因為作業系統對檔案描述符的數量有限制,因此在結束檔案操作後,別忘記 close:

const fs = require("fs");fs.open("./db.json", "r", (err, fd) => );

});

所有檔案系統的 api 都有同步和非同步兩種形式。

不推薦使用同步 api,會阻塞執行緒

try  catch (error)
非同步寫法寫起來容易進入**地獄。

fs.readfile("./package.json", (err, data) => );
在 node v12 之前,需要自己借助 promise 封裝:

function

readfilepromise(path, encoding = "utf8"

) );

});return promise;

}readfilepromise("./package.json").then(res =>

console.log(res));

在 node v12 中,引入了 fs promise api。它們返回 promise 物件而不是使用**。 api 可通過require('fs').promises訪問。如此一來,開發成本更低了。

const fspromises = require("fs").promises;fspromises

.readfile("./package.json", )

.then(console.log)

.catch(console.error);

fs.dir 類:封裝了和檔案目錄相關的操作

fs.dirent 類:封裝了目錄項的相關操作。例如判斷裝置型別(字元、塊、fifo 等)。

它們之間的關係,通過**展示:

const fspromises = require("fs").promises;

async

function

main()

}main();

fs.stats 類:封裝了檔案資訊相關的操作。它在fs.stat()的**函式中返回。

fs.stat("./package.json", (err, stats) => );
注意,關於檢查檔案是否存在:

在 nodejs 中,stream 是個非常重要的庫。很多庫的 api 都是基於 stream 來封裝的。例如下面要說的 fs 中的 readstream 和 writestream。

fs 本身提供了 readfile 和 writefile,它們好用的代價就是效能有問題,會將內容一次全部載入記憶體。但是對於幾 gb 的大檔案,顯然會有問題。

那麼針對大檔案的解決方案自然是:一點點讀出來。這就需要用到 stream 了。以 readstream 為例,**如下:

const rs = fs.createreadstream("./package.json");

let content = "";

rs.on("open", () => );

rs.on("data", chunk => );

rs.on("close", () => );

借助 stream 的 pipe,一行快速封裝乙個大檔案的拷貝函式:

function

copybigfile(src, target)

覺得不錯,幫忙點個推薦唄,您的支援是對我最大的激勵

由於個人精力有限,很多系列和歷史文章沒有即時同步,請前往「前端圖譜」&「演算法題解」,保證您有所收穫。

fs 檔案模組 一 nodejs

fs中文文件 開啟檔案 fs.open path flag mode callback callback第乙個為錯誤物件,第二個為fd fs.opensync path flag mode flag r 以讀取模式開啟檔案。如果檔案不存在則發生異常。r 以讀寫模式開啟檔案。如果檔案不存在則發生異常。...

NodeJs中的fs模組

const fs require fs 1.fs.stat 檢測是檔案還是目錄 fs.stat package.json err,data console.log 檔案 console.log 目錄 2.fs.mkdir 建立目錄 fs.mkdir css err console.log 建立成功 ...

Nodejs內建模組path與fs模組簡單使用

const fs require fs fs 模組 用於操作檔案 資料夾 例如寫入檔案,內容追加,建立資料夾,刪除檔案等多種操作。上篇文章記錄了nodejs 使用koa框架上傳。前端培訓 那麼既然有了上傳,就應該有刪除檔案。使用同步api 如果檔案不存在 異常會報錯 fs.rmsync 要刪除的檔案...