您现在的位置是:网站首页 > fs模块的核心API文章详情
fs模块的核心API
陈川
【
Node.js
】
23125人已围观
3515字
fs模块的核心API
Node.js的fs模块提供了丰富的文件系统操作功能,涵盖了从基础文件读写到高级流式处理的各个方面。这个模块同时提供了同步和异步的API,支持Promise形式的调用,能够满足不同场景下的开发需求。
文件读取
fs.readFile()
是最常用的文件读取方法,它提供了异步读取文件的简单方式:
const fs = require('fs');
// 异步读取文件
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
// Promise版本
const fsPromises = require('fs').promises;
async function readFileExample() {
try {
const data = await fsPromises.readFile('example.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
}
同步版本fs.readFileSync()
适用于脚本或初始化阶段:
try {
const data = fs.readFileSync('example.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
文件写入
fs.writeFile()
提供了文件写入功能,会覆盖已有文件内容:
const content = 'Hello, Node.js!';
// 异步写入
fs.writeFile('message.txt', content, (err) => {
if (err) throw err;
console.log('文件已保存');
});
// 追加写入
fs.appendFile('message.txt', '\n追加内容', (err) => {
if (err) throw err;
console.log('内容已追加');
});
文件状态与元数据
fs.stat()
方法可以获取文件或目录的详细信息:
fs.stat('example.txt', (err, stats) => {
if (err) throw err;
console.log(`文件大小: ${stats.size} bytes`);
console.log(`创建时间: ${stats.birthtime}`);
console.log(`是否是文件: ${stats.isFile()}`);
console.log(`是否是目录: ${stats.isDirectory()}`);
});
目录操作
创建、读取和删除目录的操作:
// 创建目录
fs.mkdir('new-directory', { recursive: true }, (err) => {
if (err) throw err;
});
// 读取目录内容
fs.readdir('./', (err, files) => {
if (err) throw err;
files.forEach(file => {
console.log(file);
});
});
// 删除目录
fs.rmdir('empty-directory', (err) => {
if (err) throw err;
});
文件流操作
对于大文件,使用流可以提高性能:
// 创建可读流
const readStream = fs.createReadStream('large-file.txt', 'utf8');
readStream.on('data', (chunk) => {
console.log(`接收到 ${chunk.length} 字节的数据`);
});
readStream.on('end', () => {
console.log('文件读取完成');
});
// 创建可写流
const writeStream = fs.createWriteStream('output.txt');
writeStream.write('一些数据...\n');
writeStream.write('更多数据...\n');
writeStream.end('写入完成');
文件监视
fs.watch()
可以监视文件或目录的变化:
const watcher = fs.watch('example.txt', (eventType, filename) => {
console.log(`事件类型: ${eventType}`);
if (filename) {
console.log(`文件名: ${filename}`);
}
});
// 停止监视
setTimeout(() => {
watcher.close();
}, 10000);
文件权限与模式
修改文件权限和所有权:
// 更改文件权限
fs.chmod('script.sh', 0o755, (err) => {
if (err) throw err;
});
// 更改文件所有者
fs.chown('file.txt', 1000, 1000, (err) => {
if (err) throw err;
});
符号链接操作
处理符号链接的相关方法:
// 创建符号链接
fs.symlink('target.txt', 'link.txt', (err) => {
if (err) throw err;
});
// 读取符号链接指向的实际路径
fs.readlink('link.txt', (err, linkString) => {
if (err) throw err;
console.log(linkString);
});
文件系统高级操作
fs
模块还提供了一些高级功能:
// 截断文件
fs.truncate('large-file.txt', 100, (err) => {
if (err) throw err;
});
// 文件重命名
fs.rename('old-name.txt', 'new-name.txt', (err) => {
if (err) throw err;
});
// 复制文件
const { copyFile } = require('fs').promises;
copyFile('source.txt', 'destination.txt')
.then(() => console.log('文件复制成功'))
.catch(console.error);
错误处理最佳实践
处理文件系统操作时的错误非常重要:
fs.readFile('nonexistent.txt', 'utf8', (err, data) => {
if (err) {
if (err.code === 'ENOENT') {
console.error('文件不存在');
} else {
console.error('发生错误:', err.message);
}
return;
}
console.log(data);
});
上一篇: 常见Stream应用场景
下一篇: 同步与异步文件操作