在 Node.js 中读取文件的最简单方法是使用 fs.readFile()
方法,将文件路径、编码和将使用文件数据(以及错误)调用的回调函数传递给它:
const fs = require('fs');
fs.readFile('/Users/joe/test.txt', 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
console.log(data);
});
或者,你可以使用同步版本 fs.readFileSync()
:
const fs = require('fs');
try {
const data = fs.readFileSync('/Users/joe/test.txt', 'utf8');
console.log(data);
} catch (err) {
console.error(err);
}
你还可以使用 fs/promises
模块提供的基于 promise 的 fsPromises.readFile()
方法:
const fs = require('fs/promises');
async function example() {
try {
const data = await fs.readFile('/Users/joe/test.txt', { encoding: 'utf8' });
console.log(data);
} catch (err) {
console.log(err);
}
}
example();
fs.readFile()
、fs.readFileSync()
、fsPromises.readFile()
这三个都在返回数据前读取了内存中文件的全部内容。
这意味着大文件将对你的内存消耗和程序执行速度产生重大影响。
在这种情况下,更好的选择是使用流读取文件内容。
在 Node.js 中写入文件的最简单方法是使用 fs.writeFile()
API。
const fs = require('fs');
const content = 'Some content!';
fs.writeFile('/Users/joe/test.txt', content, err => {
if (err) {
console.error(err);
}
// file written successfully
});
或者,你可以使用同步版本 fs.writeFileSync()
:
const fs = require('fs');
const content = 'Some content!';
try {
fs.writeFileSync('/Users/joe/test.txt', content);
// file written successfully
} catch (err) {
console.error(err);
}
你还可以使用 fs/promises
模块提供的基于 promise 的 fsPromises.writeFile()
方法:
const fs = require('fs/promises');
async function example() {
try {
const content = 'Some content!';
await fs.writeFile('/Users/joe/test.txt', content);
} catch (err) {
console.log(err);
}
}
example();
默认情况下,如果此 API 已经存在,则该 API 将为 替换文件内容。
你可以通过指定标志来修改默认值:
fs.writeFile('/Users/joe/test.txt', content, { flag: 'a+' }, err => {});
标志 | 描述 | 如果文件不存在则创建文件 |
---|---|---|
r+ |
此标志打开 reading 和 writing 的文件 | ❌ |
w+ |
此标志为 reading 和 writing 打开文件,并将流定位在文件的 beginning | ✅ |
a |
此标志为 writing 打开文件,并将流定位在文件的 end | ✅ |
a+ |
此标志为 reading 和 writing 打开文件,并将流定位在文件的 end | ✅ |
当你不想用新内容覆盖文件而是添加到文件时,附加到文件很方便。
将内容追加到文件末尾的便捷方法是 fs.appendFile()
(及其对应的 fs.appendFileSync()
):
const fs = require('fs');
const content = 'Some content!';
fs.appendFile('file.log', content, err => {
if (err) {
console.error(err);
}
// done!
});
这是一个 fsPromises.appendFile()
示例:
const fs = require('fs/promises');
async function example() {
try {
const content = 'Some content!';
await fs.appendFile('/Users/joe/test.txt', content);
} catch (err) {
console.log(err);
}
}
example();