fs
模块(文件系统模块)提供了一个用于读写文件的API。它是 Node.js 核心模块之一,允许你以异步或同步的方式对文件进行操作。
读取
异步读取文件,当文件读取完成时,调用回调函数。
fs.readFile(path[, options], callback)
同步读取文件,返回文件内容
fs.readFileSync(path[, options])
示例代码
const fs = require('fs');
fs.readFile('fs.txt', 'utf8', (err, data) => {
// 若读取失败,则 data 为 undefined
if (err) throw err;
// 若读取成功,则 err 为 null
console.log(data);
})
console.log('这是个异步读取文件的操作操作')
console.log(fs.readFileSync('fs.txt', 'utf8'));
// 异步读取使用回调函数处理结果数据, 同步读取,函数本身返回结果数据
写入
异步写入文件,当文件写入完成时,调用回调函数。
fs.writeFile(file, data, [encoding], callback)
同步写入文件
fs.writeFileSync(file, data, [encoding])
示例代码
{
const writeData = 'fs 模块(文件系统模块)提供了一个用于读写文件的API。它是 Node.js 核心模块之一,允许你以异步或同步的方式对文件进行操作。'
fs.writeFile('fs.txt', writeData, 'utf-8', (err) => {
if (err) {
// 若读取成功,则 err 为 null
console.error(err);
} else {
console.log('写入成功啦!')
}
})
try{
console.log(fs.writeFileSync('fs.txt', fs.readFileSync('fs.txt', 'utf8') + '同步写入', 'utf8'));
}catch (e){
console.error(e);
}
}
使用 fs.writeFileSync
方法同步写入文件时,如果操作成功,该方法不会返回任何值,如果写入过程中发生错误,它会抛出一个异常,因此我们通过try...catch
语句来处理 fs.writeFileSync
可能抛出的异常
追加文件
(fs.appendFile
和 fs.appendFileSync
)
-
fs.appendFile(file, data, [encoding], callback)
:异步追加数据到文件末尾。 -
fs.appendFileSync(file, data, [encoding])
:同步追加数据到文件末尾。
删除文件
(fs.unlink
和 fs.unlinkSync
)
-
fs.unlink(path, callback)
:异步删除文件。 -
fs.unlinkSync(path)
:同步删除文件。
重命名文件
(fs.rename
和 fs.renameSync
)
-
fs.rename(oldPath, newPath, callback)
:异步重命名文件。 -
fs.renameSync(oldPath, newPath)
:同步重命名文件。
检查文件状态
(fs.stat
和 fs.statSync
)
-
fs.stat(path, callback)
:异步获取文件状态(如大小、创建时间等)。 -
fs.statSync(path)
:同步获取文件状态。
创建和读取目录
(fs.mkdir
, fs.readdir
, fs.rmdir
)
-
fs.mkdir(path[, options], callback)
:异步创建目录。 -
fs.readdir(path, callback)
:异步读取目录内容。 -
fs.rmdir(path, callback)
:异步删除空目录。
监控文件变化
(fs.watch
)
-
fs.watch(filename[, options], listener)
:监控文件的变化,当文件被修改时触发监听器。
路径动态拼接问题
在使用 fs
模块操作文件时,如果提供的操作路径是以 ./
或 ../
开头的相对路径时,很容易出现路径动态拼接错误的问题。 原因:代码在运行的时候,会以执行 node
命令时所处的目录为基准,动态拼接出被操作文件的完整路径。