node写入文件的几种方式
R : 只读方式打开
W : 写入方式打开 覆盖写
A : 写入方式打开 追加写
同步写入
// sync.js
const fs = require('fs')
// 同步写入
// 打开文件
const fd = fs.openSync('./json/sync.txt', 'a')
// 准备写入的数据
const str = '我爱你 塞北的雪\n'
// 写入
fs.writeSync(fd, str, 'utf-8')
// 关闭资源
fs.closeSync(fd)
// node ... 便被写入sync.txt
sync.txt (追加写)
我爱你 塞北的雪
我爱你 塞北的雪
异步写入
// async.js
const fs = require('fs')
// 写入的资源
const str = '曾经沧海难为水,除却巫山不是云。复次花丛懒回顾,边缘修道半缘君。'
fs.open('./json/async.txt', 'w', (error, fd) => {
if (error) {
console.log(error);
} else {
//写入文件
fs.write(fd, str, error => {
error ? console.log('写入失败') : console.log('写入成功');
})
fs.close(fd, error => {
error ? console.log('关闭失败') : console.log('关闭成功');
})
}
})
async.txt (覆盖写)
曾经沧海难为水,除却巫山不是云。复次花丛懒回顾,边缘修道半缘君。
简单写入
// easy.js
const fs = require('fs')
// * 读取json 和存入 json都一定要序列化和反序列化
const bookObj = {
"book_name": "我当阴阳先生的那几年",
"book_price": 38,
"book_page": 700,
"book_author": "崔走召"
}
// 简单写入
fs.readFile('./json/1.json', 'utf-8', (error, data) => {
if (!error) {
const newData = JSON.parse(data)
bookObj.book_id = newData[newData.length - 1].book_id + 1;
console.log(newData, bookObj);
newData.push(bookObj)
fs.writeFile('./json/1.json', JSON.stringify(newData), { encoding: 'utf-8', flag: 'w' }, e => {
e ? console.log('添加失败') : console.log('添加成功');
})
}
})
1.json
[
{
"book_id": 1,
"book_name": "我当道士那些年",
"book_price": 40,
"book_page": 800,
"book_author": "仐三"
},
{
"book_name": "我当阴阳先生的那几年",
"book_price": 38,
"book_page": 700,
"book_author": "崔走召",
"book_id": 2
}
]
流式写入
// strame.js
const fs = require('fs')
// 流式写入适合写入大批量的数据
// 创建一个可写的流,流式操作一般都是使用a方式进行写入
let ws = fs.createWriteStream('./json/stream.txt', { flags: 'a', encoding: 'utf-8' })
ws.on('open', () => {
console.log('流已经打开');
})
ws.write('你好 世界\n')
ws.on('close', () => {
console.log('流关闭了...');
})
// 结束操作
ws.end()
strame.txt
你好 世界
你好 世界
你好 世界
你好 世界
你好 世界
other
// dataOpera.js
const fs = require('fs')
console.log('fs', fs);
// readFileSync 写入的似乎是 buffer数据类型, 需要使用toString 方法转换
let result = fs.readFileSync('./json/snow.text')
console.log('result', result, result.toString());