为了账号安全,请及时绑定邮箱和手机立即绑定

用Node.js编写文件

用Node.js编写文件

jeck猫 2019-06-10 16:55:28
用Node.js编写文件我一直试图在使用Node.js时找到一种写入文件的方法,但没有成功。我怎么能这么做?
查看完整描述

3 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

中有很多细节文件系统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!");});


查看完整回答
反对 回复 2019-06-10
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

目前有三种编写文件的方法:

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

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

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

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

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

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

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

换言之:“缓冲区”是对象。它是否“被缓冲”是该对象的属性。

如果您查看代码,WriteStream从可写的Stream对象。如果您注意,您将看到它们如何刷新内容;它们没有任何缓冲系统。

如果写入字符串,则将其转换为缓冲区,然后发送到本机层并写入磁盘。在编写字符串时,它们没有填充任何缓冲区。所以,如果你这样做了:

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

你在做:

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

那是调用I/O层。虽然您使用的是“缓冲区”,但数据并不是缓冲的。缓冲流可以:fs.write(new Buffer ("abc")),对I/O层的一个调用。

到目前为止,Node.js v0.12(公布的稳定版本为02/06/2015)现在支持两个功能:cork()uncork()..看来,这些函数最终将允许您缓冲/刷新写调用。

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

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


查看完整回答
反对 回复 2019-06-10
?
慕仙森

TA贡献1827条经验 获得超7个赞

你当然可以让它更先进一点。非阻塞,写入零碎,而不是立即写入整个文件:

var fs = require('fs');var stream = fs.createWriteStream("my_file.txt");stream.once('open', function(fd) {
  stream.write("My first row\n");
  stream.write("My second row\n");
  stream.end();});


查看完整回答
反对 回复 2019-06-10
  • 3 回答
  • 0 关注
  • 555 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信