文件写入

我们来看一下如何写一个文件。

创建19-writeFile.js

首先,先引入fs模块和path模块

1
2
const fs = require("fs");
const path = require("path");

写入文件一共有三种方式,

  • 异步写入 fs.writeFile()

  • 同步写入 fs.writeFileSync()

  • 以流的方式写入 fs.createWriteStream()

一、fs.writeFile()

1
2
3
4
5
6
7
8
9
10
11
12
const fs = require("fs");
const path = require("path");
const filename = path.join(__dirname,"./demo.txt");
fs.writeFile(filename,{name:"Jack"},(err) => {
if(err){
console.log("error");
}else{
console.log("success");
}
});

fs.writeFile()的第二个参数是类型值,可以是any,我们刚写入了一个对象,看看会是什么结果。我们执行一下

1
2
$ node 19-writeFile.js
success

写入成功,我们看看demo.txt里是什么

1
[object Object]

我们可以发现,写入的内容就是object.toString()过后的结果。

那么怎么才能达到我们想要的结果呢?

答案是用JSON.stringify()把对象转换为JSON(序列化)

JSON.stringify() => 序列化

JSON.parse() => 反序列化

我们修改一下上面的代码

1
2
3
4
5
6
7
8
9
10
11
12
const fs = require("fs");
const path = require("path");
const filename = path.join(__dirname,"./demo.txt");
fs.writeFile(filename,JSON.stringify({name:"Jack"}),(err) => {
if(err){
console.log("error");
}else{
console.log("success");
}
});

再来执行一下。我们看到demo.txt是如下结果

1
{"name":"Jack"}

什么情况会出现写文件错误呢?

  • 意外错误
  • 文件权限问题
  • 文件夹找不到(不会自动创建文件夹)

二、fs.writeFileSync()

1
2
3
4
5
6
7
8
9
const fs = require("fs");
const path = require("path");
const filename = path.join(__dirname,"./demo.txt");
try{
fs.writeFileSync(filename,JSON.stringify({name:"Mary"}));
}catch (e){
console.log(e)
}

执行过后,demo.txt里的内容变为

1
{"name":"Mary"}

三、fs.createWriteStream()

1
2
3
4
5
6
7
8
9
10
const fs = require("fs");
const path = require("path");
const filename = path.join(__dirname,"./demo.txt");
let writeStream = fs.createWriteStream(filename);
writeStream.write("Hello",(err) => {
if (err) throw err;
console.log("写入成功")
});

执行过后,demo.txt里的内容变为

1
Hello

以上就是写入文件的三种方式。

but,我们发现了一个问题,就是文件写入默认是会覆盖之前的内容的,那么怎么才能不覆盖呢?好,我们引出下面的API,fs.appendFile(),用法和上面的一样。

1
2
3
4
5
6
7
8
9
10
11
12
const fs = require("fs");
const path = require("path");
const filename = path.join(__dirname,"./demo.txt");
fs.appendFile(filename,{name:"Jack"},(err) => {
if(err){
console.log("error");
}else{
console.log("success");
}
});

执行本代码过后,demo.txt里的内容变为了

1
Hello{"name":"Jack"}

本文结束,感谢阅读。

本文作者:melody0z
本文链接:https://melodyvoid/Node/file-write.html
欢迎转载,转载请注明文本链接

坚持原创技术分享,您的支持将鼓励我继续创作!