Node.js fs 文件系统模块
fs 模块提供文件系统操作能力,包括文件读写、目录管理、文件信息查询等。
引入模块
JavaScript
const fs = require('fs');
// 或使用 Promise 版本
const fsPromises = require('fs').promises;
同步与异步 API
| API 类型 | 特点 | 示例 |
|---|---|---|
| 同步 | 阻塞执行,返回结果 | fs.readFileSync() |
| 异步回调 | 非阻塞,回调处理 | fs.readFile(callback) |
| 异步 Promise | 非阻塞,Promise | fs.promises.readFile() |
文件读取
JavaScript
// 同步读取
const data = fs.readFileSync('file.txt', 'utf8');
console.log(data);
// 异步回调读取
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
// Promise 版本
async function readFile() {
const data = await fsPromises.readFile('file.txt', 'utf8');
console.log(data);
}
文件写入
JavaScript
// 同步写入
fs.writeFileSync('output.txt', 'Hello World');
// 异步回调写入
fs.writeFile('output.txt', 'Hello World', (err) => {
if (err) throw err;
console.log('写入完成');
});
// Promise 版本
await fsPromises.writeFile('output.txt', 'Hello World');
// 追加写入
fs.appendFileSync('log.txt', '新日志\n');
文件信息
JavaScript
// 获取文件状态
fs.stat('file.txt', (err, stats) => {
if (err) throw err;
console.log('是否文件:', stats.isFile());
console.log('是否目录:', stats.isDirectory());
console.log('文件大小:', stats.size);
console.log('修改时间:', stats.mtime);
});
文件操作
JavaScript
// 删除文件
fs.unlinkSync('file.txt');
// 或
await fsPromises.unlink('file.txt');
// 重命名文件
fs.renameSync('old.txt', 'new.txt');
// 复制文件
fs.copyFileSync('source.txt', 'dest.txt');
目录操作
JavaScript
// 创建目录
fs.mkdirSync('newdir');
// 递归创建
fs.mkdirSync('parent/child', { recursive: true });
// 读取目录
const files = fs.readdirSync('./');
console.log(files);
// 删除目录
fs.rmdirSync('emptydir');
// 删除非空目录(需递归)
fs.rmSync('nonempty', { recursive: true });
文件监听
JavaScript
// 监听文件变化
fs.watch('file.txt', (eventType, filename) => {
console.log(`事件: ${eventType}, 文件: ${filename}`);
});
// 监听目录
fs.watch('./', (eventType, filename) => {
console.log('文件变化:', filename);
});
判断文件是否存在
JavaScript
// 推荐:使用 stat 或 access
fs.access('file.txt', fs.constants.F_OK, (err) => {
console.log(err ? '不存在' : '存在');
});
// Promise 版本
try {
await fsPromises.access('file.txt');
console.log('文件存在');
} catch {
console.log('文件不存在');
}
fs.exists() 已弃用,不推荐使用。
要点总结
- fs 提供同步、异步回调、Promise 三种 API
- readFile/writeFile 用于文件读写,默认返回 Buffer
- stat 获取文件信息,readdir 列出目录内容
- mkdir 可递归创建目录,rm 可递归删除
- 使用 fs.promises 可配合 async/await 简化代码
📝 发现内容有误?点击此处直接编辑