fs.writeFile(file, data[, options], callback)
file<string> | <Buffer> | <URL> | <integer> 文件名或文件描述符data<string> | <Buffer> | <TypedArray> | <DataView> | <Object>options<Object> | <string>encoding<string> | <null> 默认值:'utf8'mode<integer> 默认值:0o666flag<string> 请参阅对文件系统flags的支持。 默认值:'w'。signal<AbortSignal> 允许中止正在进行的写入文件
callback<Function>err<Error>
当 file 是文件名时,将数据异步地写入文件,如果文件已存在则替换该文件。
data 可以是字符串或缓冲区。
当 file 是文件描述符时,其行为类似于直接调用 fs.write()(推荐)。
请参阅以下有关使用文件描述符的说明。
如果 data 是缓冲区,则忽略 encoding 选项。
mode 选项仅影响新创建的文件。
有关详细信息,请参阅 fs.open()。
如果 data 是普通的对象,则它必须具有自有的(不是继承的)toString 函数属性。
import { writeFile } from 'fs';
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, (err) => {
if (err) throw err;
console.log('The file has been saved!');
});如果 options 是字符串,则它指定编码:
import { writeFile } from 'fs';
writeFile('message.txt', 'Hello Node.js', 'utf8', callback);在同一个文件上多次使用 fs.writeFile() 而不等待回调是不安全的。
对于这种情况,建议使用 fs.createWriteStream()。
与 fs.readFile 类似,fs.writeFile 是一个便捷的方法,其在内部执行多次 write 调用以写入传给它的缓冲区。
对于性能敏感的代码,则考虑使用 fs.createWriteStream()。
可以使用 <AbortSignal> 取消 fs.writeFile()。
取消是"尽力而为"的,并且可能仍会写入一些数据。
import { writeFile } from 'fs';
const controller = new AbortController();
const { signal } = controller;
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, { signal }, (err) => {
// 当请求中止时 - 使用 AbortError 调用回调
});
// 当应该中止请求时
controller.abort();中止正在进行的请求不会中止单个操作系统请求,而是中止内部缓冲的 fs.writeFile 执行。
file<string> | <Buffer> | <URL> | <integer> filename or file descriptordata<string> | <Buffer> | <TypedArray> | <DataView> | <Object>options<Object> | <string>encoding<string> | <null> Default:'utf8'mode<integer> Default:0o666flag<string> See support of file systemflags. Default:'w'.signal<AbortSignal> allows aborting an in-progress writeFile
callback<Function>err<Error>
When file is a filename, asynchronously writes data to the file, replacing the
file if it already exists. data can be a string or a buffer.
When file is a file descriptor, the behavior is similar to calling
fs.write() directly (which is recommended). See the notes below on using
a file descriptor.
The encoding option is ignored if data is a buffer.
The mode option only affects the newly created file. See fs.open()
for more details.
If data is a plain object, it must have an own (not inherited) toString
function property.
import { writeFile } from 'fs';
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, (err) => {
if (err) throw err;
console.log('The file has been saved!');
});If options is a string, then it specifies the encoding:
import { writeFile } from 'fs';
writeFile('message.txt', 'Hello Node.js', 'utf8', callback);It is unsafe to use fs.writeFile() multiple times on the same file without
waiting for the callback. For this scenario, fs.createWriteStream() is
recommended.
Similarly to fs.readFile - fs.writeFile is a convenience method that
performs multiple write calls internally to write the buffer passed to it.
For performance sensitive code consider using fs.createWriteStream().
It is possible to use an <AbortSignal> to cancel an fs.writeFile().
Cancelation is "best effort", and some amount of data is likely still
to be written.
import { writeFile } from 'fs';
const controller = new AbortController();
const { signal } = controller;
const data = new Uint8Array(Buffer.from('Hello Node.js'));
writeFile('message.txt', data, { signal }, (err) => {
// When a request is aborted - the callback is called with an AbortError
});
// When the request should be aborted
controller.abort();Aborting an ongoing request does not abort individual operating
system requests but rather the internal buffering fs.writeFile performs.