node.js 文件读写的简单代码
更详细的的文档说明 https://nodejs.cn/api/fs.html
一、使用 fs 模块
读取文件
读取文本
var fs = require('fs')
fs.readFile('js/2.js','utf-8', function (err, data) {
if (err) {
console.log(err)
} else {
console.log(data)
}
})
var fs = require('fs')
导入文件读写模块fs并存入变量fs
readFile(文件,编码,回调函数)
读取文件的方法,需要三个参
编码为必须,不写默认为二进制读取
function (err, data)
回调函数,err
错误信息 data
读取的数据
没有错误err
为bull
可以优化为箭头函数
fs.readFile('js/2.js', 'utf-8', (err, data) => {
if (err) {
console.log(err)
} else {
console.log('读取好了' + data)
}
})
读取二进制数据
fs.readFile('js/2.js', function (err, data) {
if (err) {
console.log(err)
} else {
console.log(data)
}
})
由于没有传入编码,所以编码默认为null
读取返回的是例如下面的二进制数据
Buffer(158) [102, 117, 110, '...']
写入数据
fs.writeFile('js/2.js', data, function (err) {
if (err) {
console.log(err)
} else {
console.log('写好了')
}
})
writeFile(文件,数据,回调函数)
写入数据的方法
同步
以上操作默认为异步,如果需要同步
fs.readFileSync()
fs.writeFileSync()
二、使用 fs 的 stream
1. 为什么要使用?
readFile
是一口气吃完整个文件再给你
createReadStream
是一口一口吃一口一口咽
除非文件很大(如大于1M的图片音乐等),不使用createReadStream
fs.createReadStream
更适合处理大文件。
fs.createReadStream
创建一个读取文件的流,并且可以逐块读取和发送文件(data
事件可能会有多次,每次传递的chunk
是流的一部分数据。),而不需要一次性将整个文件加载到内存中。这使得fs.createReadStream
能够处理非常大的文件,而不会消耗过多的内存。相比之下,
fs.readFile
会一次性将整个文件读入内存,如果文件非常大,这可能会消耗大量的内存,并可能导致 Node.js 进程崩溃。
读取流中每个区块的大小
创建一个读取流时,你可以指定一个选项 highWaterMark
来控制每次读取的数据块的大小。highWaterMark
的默认值是 64KB(对于 fs 模块)。
读取文件
基本示例:
const fs = require('fs')
// 怎么读,读什么
var rs = fs.createReadStream('2.js', 'utf-8')
// 在读了
rs.on('data', function (chunk) {
console.log(chunk);
});
// 读完了
rs.on('end', function () {
console.log('END');
});
// 读不了
rs.on('error', function (err) {
console.log('ERROR: ' + err);
});
写入文件
基本示例:
const fs = require('fs')
// 如果文件没有会创建
var rs = fs.createWriteStream('2.js', 'utf-8')
rs.on('finish', () => {
// 成功事件(在end()后)
console.log("finish")
}).on('error', (e) => {
// 异常事件
console.log("error!" + e)
})
// 途中多次write会追加写入
rs.write("你好")
rs.write("\n")
rs.write("Magic Node.js")
// 结束写入
rs.end()