写入节点中的文件.js

2022-08-29 21:55:07

我一直在尝试在使用Node.js时找到一种写入文件的方法,但没有成功。我该怎么做?


答案 1

文件系统 API 中有很多详细信息。最常见的方法是:

const fs = require('fs');

fs.writeFile("/tmp/test", "Hey there!", function(err) {
    if(err) {
        return console.log(err);
    }
    console.log("The file was saved!");
}); 

// Or
fs.writeFileSync('/tmp/test-sync', 'Hey there!');

答案 2

目前有三种方法可以写入文件:

  1. fs.write(fd, buffer, offset, length, position, callback)

    您需要等待回调以确保缓冲区写入磁盘。它没有缓冲。

  2. fs.writeFile(filename, data, [encoding], callback)

    所有数据必须同时存储;不能执行顺序写入。

  3. fs.createWriteStream(path, [options])

    创建 WriteStream,这很方便,因为您不需要等待回调。但同样,它没有缓冲。

顾名思义,WriteStream是一个流。根据定义,流是“缓冲区”,其中包含沿一个方向(源►目标)移动的数据。但可写流不一定是“缓冲”的。当您写入时间时,流会被“缓冲”,并且流会将缓冲区发送到内核(因为它已满并且需要刷新)。nn+1

换句话说:“缓冲区”是对象。它是否“被缓冲”是该对象的属性。

如果您查看代码,则从可写对象继承。如果你注意,你会看到他们如何刷新内容;他们没有任何缓冲系统。WriteStreamStream

如果写入字符串,则会将其转换为缓冲区,然后发送到本机层并写入磁盘。写入字符串时,它们不会填满任何缓冲区。因此,如果您这样做:

write("a")
write("b")
write("c")

你正在做:

fs.write(new Buffer("a"))
fs.write(new Buffer("b"))
fs.write(new Buffer("c"))

这是对 I/O 层的个调用。尽管使用的是“缓冲区”,但不会缓冲数据。缓冲流可以执行:,对 I/O 层的一次调用。fs.write(new Buffer ("abc"))

截至目前,在Node中.js v0.12(02/06/2015宣布的稳定版本)现在支持两个功能:cork()uncok()。似乎这些函数最终将允许您缓冲/刷新写入调用。

例如,在Java中,有一些类提供缓冲流(,...)。如果写入三个字节,则这些字节将存储在缓冲区(内存)中,而不是仅对三个字节执行 I/O 调用。当缓冲区已满时,将刷新内容并将其保存到磁盘。这可以提高性能。BufferedOutputStreamBufferedWriter

我没有发现任何东西,只是记得应该如何进行磁盘访问。