Node.js 檔案統計

每個檔案都帶有一組細節,我們可以使用 Node.js 進行檢查,特別是使用fs 模組提供的 stat() 方法。

你稱它為傳遞文件路徑,一旦 Node.js 獲取到文件詳細信息,它將調用你傳遞的回調函數,帶有 2 個參數:錯誤消息和文件狀態

const fs = require('node:fs');

fs.stat('/Users/joe/test.txt', (err, stats) => {
  if (err) {
    console.error(err);
  }
  // we have access to the file stats in `stats`
});

Node.js 還提供了一個同步方法,該方法將阻塞線程直到文件狀態準備就緒

const fs = require('node:fs');

try {
  const stats = fs.statSync('/Users/joe/test.txt');
} catch (err) {
  console.error(err);
}

文件信息包含在 stats 變量中。我們可以使用 stats 提取什麼樣的信息?

很多,包括

  • 使用 stats.isFile()stats.isDirectory() 確定文件是目錄還是文件
  • 使用 stats.isSymbolicLink() 確定文件是否是符號連結
  • 使用 stats.size 獲取文件大小(以字節為單位)

還有其他高級方法,但你在日常編程中主要會使用這些。

const fs = require('node:fs');

fs.stat('/Users/joe/test.txt', (err, stats) => {
  if (err) {
    console.error(err);
    return;
  }

  stats.isFile(); // true
  stats.isDirectory(); // false
  stats.isSymbolicLink(); // false
  stats.size; // 1024000 //= 1MB
});

如果你喜歡,你也可以使用由 fs/promises 模塊提供的基於 promise 的 fsPromises.stat() 方法

const fs = require('node:fs/promises');

async function example() {
  try {
    const stats = await fs.stat('/Users/joe/test.txt');
    stats.isFile(); // true
    stats.isDirectory(); // false
    stats.isSymbolicLink(); // false
    stats.size; // 1024000 //= 1MB
  } catch (err) {
    console.log(err);
  }
}
example();

你可以在 官方文檔 中了解更多關於 fs 模塊的信息。

閱讀時間
2 分鐘閱讀
貢獻
編輯此頁