Skip to content

Node.js ファイル統計情報

Node.js を使用すると、すべてのファイルに関する詳細情報を調べることができます。特に、fs モジュールで提供されるstat()メソッドを使用します。

ファイルパスを渡して呼び出すと、Node.js はファイルの詳細を取得し、エラーメッセージとファイル統計情報の 2 つのパラメーターを使用して、渡したコールバック関数を呼び出します。

js
import fs from 'node:fs'
fs.stat('/Users/joe/test.txt', (err, stats) => {
  if (err) {
    console.error(err)
  }
  // `stats`にファイル統計情報へのアクセス権があります
})

Node.js は、ファイル統計情報が準備できるまでスレッドをブロックする同期メソッドも提供しています。

js
import fs from '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を使用して、ファイルサイズをバイト単位で取得できます。

他にも高度なメソッドがありますが、日々のプログラミングで使用するもののほとんどはこれです。

js
import fs from '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()メソッドも使用できます。

js
import fs from 'node:fs/promises'
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)
}

fs モジュールについては、ファイルシステムモジュールのドキュメントで詳しく読むことができます。