功能
Node.js 的 fs
模块提供了文件系统(File System)的API,可实现与硬盘的交互。这个模块是Node.js的核心模块之一,它提供了同步和异步两种方式来执行文件操作。
以下是一些常用的 fs
模块功能:
在使用之前需要先导入
const fs = require('fs');
1.读取文件 (fs.readFile
和 fs.readFileSync
)
// 异步读取文件
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
// 同步读取文件
const data = fs.readFileSync('example.txt', 'utf8');
console.log(data);
2.写入文件 (fs.writeFile
和 fs.writeFileSync
)
语法:fs.writeFile(file, data[, options], callback)
参数说明:file 文件名
data 待写入的数据
options 选项设置,根据实际需求可选择使用
callback 写入回调
// 异步写入文件 如果文件不存在则创建文件
fs.writeFile('output.txt', 'Hello, World!', err => {
if (err) throw err;
console.log('The file has been saved!');
});
// 同步写入文件 会阻塞代码的执行,直到写入文件执行完毕
try {
fs.writeFileSync('output.txt', 'Hello, World!');
console.log('The file has been saved!');
} catch (err) {
console.error(err);
}
3.追加文件 (fs.appendFile
和 fs.appendFileSync
)
//异步追加文件
fs.appendFile('output.txt', '\nAppended text', err => {
if (err) {
console.error('Error appending to file:', err);
return;
}
console.log('Text appended successfully');
});
//同步追加文件
try {
fs.appendFileSync('output.txt', '\nAppended text');
console.log('Text appended successfully');
} catch (err) {
console.error('Error appending to file:', err);
}
重命名文件 (fs.rename
和 fs.renameSync
)
//异步重命名文件
fs.rename('oldName.txt', 'newName.txt', err => {
if (err) {
console.error('Error renaming file:', err);
return;
}
console.log('File renamed successfully');
});
//同步重命名文件
try {
fs.renameSync('oldName.txt', 'newName.txt');
console.log('File renamed successfully');
} catch (err) {
console.error('Error renaming file:', err);
}
删除文件 (fs.unlink
和 fs.unlinkSync
)
//异步删除文件
fs.unlink('output.txt', err => {
if (err) {
console.error('Error deleting file:', err);
return;
}
console.log('File deleted successfully');
});
//同步删除文件
try {
fs.unlinkSync('output.txt');
console.log('File deleted successfully');
} catch (err) {
console.error('Error deleting file:', err);
}
检查文件状态 (fs.stat
和 fs.statSync
)
//异步检查文件状态
fs.stat('example.txt', (err, stats) => {
if (err) {
console.error('Error stating file:', err);
return;
}
console.log('File stats:', stats);
});
//同步检查文件状态
const stats = fs.statSync('example.txt');
console.log('File stats:', stats);
创建和删除目录 (fs.mkdir
, fs.rmdir
, fs.mkdirSync
, fs.rmdirSync
)
//异步创建目录
fs.mkdir('newDir', { recursive: true }, err => {
if (err) {
console.error('Error creating directory:', err);
return;
}
console.log('Directory created successfully');
});
//同步创建目录
try {
fs.mkdirSync('newDir', { recursive: true });
console.log('Directory created successfully');
} catch (err) {
console.error('Error creating directory:', err);
}
//异步删除空目录 如果想要删除非空目录,使用rimraf库
fs.rmdir('emptyDirectoryPath', (err) => {
if (err) {
console.error('Error deleting directory:', err);
return;
}
console.log('Empty directory deleted successfully');
});
//同步删除空目录
try {
fs.rmdirSync('emptyDirectoryPath');
console.log('Empty directory deleted successfully');
} catch (err) {
console.error('Error deleting directory:', err);
}
读取目录内容 (fs.readdir
和 fs.readdirSync
)
//异步读取目录内容
fs.readdir('directoryPath', (err, files) => {
if (err) {
console.error('Error reading directory:', err);
return;
}
console.log('Directory contents:', files);
});
//同步读取目录内容
const files = fs.readdirSync('directoryPath');
console.log('Directory contents:', files);
监视文件变化 (fs.watch
)
//只能监听到文件或目录被重命名、移动或者内容发生变化时触发
const watcher = fs.watch('fileToWatch.txt', (eventType, filename) => {
console.log(`Event type is: ${eventType}`);
if (filename) {
console.log(`Filename provided: ${filename}`);
}
// Do something when a file is changed, added, or deleted.
});