昨天我們學了 path
模組,今天要進一步進入 Node.js 的核心功能之一:檔案系統 (File System, fs)。
透過 fs
模組,我們能讓 JavaScript 直接操作電腦上的檔案與資料夾,
從而打造自動化工具、檔案管理程式,甚至伺服器日誌系統。
fs
的功能Node.js 不只是拿來跑伺服器,它也能處理 檔案 I/O(Input / Output):
這些操作,在日常開發與專案維護中都非常實用。
Node.js fs
提供三種方式來操作檔案:
const fs = require("fs");
fs.readFile("test.txt", "utf8", (err, data) => {
if (err) {
console.error("讀檔失敗:", err);
return;
}
console.log("檔案內容:", data);
});
import * as fsp from "fs/promises";
try {
const data = await fsp.readFile("test.txt", "utf8");
console.log("檔案內容:", data);
} catch (err) {
console.error("讀檔失敗:", err);
}
👉 結合 async/await,程式碼最乾淨。
const fs = require("fs");
try {
const data = fs.readFileSync("test.txt", "utf8");
console.log("檔案內容:", data);
} catch (err) {
console.error("讀檔失敗:", err);
}
👉 適合 CLI 工具或初始化,不適合伺服器環境。
import * as fsp from "fs/promises";
const text = await fsp.readFile("notes.txt", "utf8");
console.log("檔案內容:", text);
await fsp.writeFile("output.txt", "Hello Node.js!");
console.log("檔案已寫入完成");
await fsp.appendFile("output.txt", "\n追加一行內容");
console.log("內容已追加完成");
想知道檔案大小、修改時間、是否存在?
const stat = await fsp.stat("notes.txt");
console.log("大小:", stat.size, "bytes");
console.log("最後修改時間:", stat.mtime);
console.log("是否為檔案?", stat.isFile());
try {
await fsp.access("notes.txt");
console.log("檔案存在且可存取");
} catch {
console.log("檔案不存在或無權限");
}
await fsp.mkdir("logs", { recursive: true });
console.log("logs 資料夾建立完成");
const files = await fsp.readdir("data");
console.log("data 資料夾內檔案:", files);
await fsp.rename("old.txt", "new.txt");
console.log("檔案已重新命名");
await fsp.unlink("temp.txt");
console.log("檔案已刪除");
await fsp.rmdir("logs");
console.log("資料夾已刪除");
今天學習了:
fs
的三種 API 風格:Callback、Promise、SyncreadFile
、writeFile
、appendFile
stat
、access
mkdir
、readdir
、rename
、unlink
、rmdir
這些功能讓 Node.js 能夠處理各種檔案相關需求,是自動化工具與伺服器應用的基礎。