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 模块的更多信息。