node学习笔记:文件读写操作

1.1 文件的写入操作

文件的简单写入:直接一次性把全部内容写入。

const fs = require('fs')
fs.writeFile('./a.txt', 'new学习node的一天', {
    flag: 'a'
}, (err) => {
    if (!err) {
        console.log('文件写入成功')
    } else {
        console.log(err)
    }
})

解释:第一个参数是路径,第二个是写入的数据,第三个是可选参数(是一个配置对象,里面最常用的属性是flag,它的默认值是:‘w’,意思是覆盖以前的内容,还有另一个值是:‘a’,大概是append这个单词的缩写,就在原有的内容上追加内容。)第四个是一个回调函数:回调函数的形参只有一个:err。

文件的写入流:写入流就是分段的写入,一段一段的写入,写完要关闭,不然写入流会一直占用cpu。当要写入的数据过大的时候,我们可以采用写入流的方式去写入数据,如果使用简单写入可以导致服务器报错,因为文件过大,服务器内存不够。

const fs = require('fs')
// 创建流
const ws = fs.createWriteStream('./a.txt', {
    flags: 'a'  // 这里也是append,追加的意思
})
// 监听流是否开启
ws.on('open', () => {
    console.log('可写流开启')
})
// 监听流是否关闭
ws.on('close', () => {
    console.log('可写流关闭')
})
ws.write('haha')
ws.write('shanbi')
ws.close()  // 如果node的版本在8或者低于8,建议使用ws.end()来关闭写入流
ws.end() // 另一种关闭流的方法

1.2 文件的读取操作

文件的简单读取:直接一次性读取。

const fs = require('fs')
fs.readFile('./a.txt', (err, data) => {
    if (err) {
        return console.log(err)
    }
    console.log(data.toString()) // 将二进制转换成我们看得到的懂得字符。这个是buffer的tostring。
})

注:由于node的设计原则是:错误优先,所以大部分的回调函数的第一个参数就是err

文件的读取流:分段分段的读取文件

const fs = require('fs')
const rs = fs.createReadStream('./a.txt')
// 监听可读流是否开启
rs.on('open', () => {  
    console.log('开启可读流')
})
// 监听可读流是否关闭
rs.on('close', () => {
    console.log('关闭可读流')
})
// 自动触发data事件,进行读取
rs.on('data', (data) => {
    console.log(data.toString())
})

注:文件的可读流是会自动关闭的,我们无需关闭。

1.3 可读流和可写流的综合使用

const fs = require('fs')
const rs = fs.createReadStream('./a.txt')
const ws = fs.createWriteStream('./b.txt')
rs.on('open', () => {
    console.log('开启可读流')
})
rs.on('close', () => {
    console.log('关闭可读流')
    ws.close() // 为了确保写入完成,我们需要在可读流关闭后才去关闭可写流
})
ws.on('open', () => {
    console.log('开启可写流')
})
ws.on('close', () => {
    console.log('关闭可写流')
})
rs.on('data', (data) => {
    ws.write(data)
})

注:这里主要是注意可写流的关闭时机。必须在可读流关闭后才才关闭,否则会导致写入错误!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值