• 【前端知识】Node——文件流的读写操作


    四种基本流类型:
    1.Writable: 可以向其写入数据的流
    2.Readable: 可以从中读取数据的流
    3.Duplex:同时为Readable 和 Writable
    4.Transform: Duplex可以在写入和读取数据时修改或转换数据的流

    一、Readable

    const fs = require('fs');
    
    // 创建文件的Readable
    const reader = fs.createReadStream('./test.txt', {
        start: 8, // 文件读取开始的位置
        end: 18, // 文件读取结束的位置
        highWaterMark: 4 // 一次性读取字节的长度,默认是64kb;
    })
    
    // 监听 read 数据
    reader.on('data', (data) => {
        console.log(data.toString());
    })
    
    // 监听打开文件
    reader.on('open', (fd) => {
        console.log('文件被打开!');
    })
    
    // 监听读取结束
    reader.on('end', () => {
        console.log('文件读取结束!');
    })
    
    // 监听关闭文件
    reader.on('close', () => {
        console.log('文件被关闭!');
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    二、Writable

    // 创建文件的Writable
    const writer = fs.createWriteStream('./test.txt', {
        flags: 'a+', // 追加写入
        start: 8 // 写入位置
    });
    
    // 写入数据 
    writer.write("Hello OUTMAN", () => {
        console.log('写入成功!');
    })
    
    // 监听文件打开
    writer.on('open', () => {
        console.log('文件被打开!');
    })
    
    // 监听文件关闭(无法监听)
    // 无法监听的原因:写入流在打开后不会自动关闭,必须手动触发来通知node已经写入结束,并发射finish事件
    writer.on('close', () => {
        console.log('文件被关闭!'); // 无法监听,不打印
    })
    
    // 手动close后, finish ---> close
    writer.close();
    
    writer.on('finish', () => {
        console.log('文件写入完成!');
    })
    
    writer.on('close', () => {
        console.log('文件被关闭!');
    })
    
    // 直接使用end,end = write传值 + 文件close,一步到位
    writer.end('Hello Outman!')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    三、pipe方法

    // pip方法
    const reader = fs.createReadStream('./test.txt');
    const writer = fs.createWriteStream('./copy.txt');
    
    // 常规方法,嵌套 read & write
    reader.on('data', (data) => {
        console.log(data);
        writer.write(data, (err) => {
            console.log(err);
        })
    })
    
    // 利用pipe实现
    reader.pipe(writer);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
  • 相关阅读:
    ADO.NET之SqlDataAdpter对象
    使用 uWSGI 部署 Django 应用详解
    推荐系统-召回-概述(四):热门推荐
    MyBatisPlus(二十)防全表更新与删除
    JS字符串知识点
    vue项目如何防范XSS攻击?
    -角谷猜想-
    【前端】[vue3] [uni-app] 组件样式击穿:deep
    SpringBoot框架Mockito的使用
    电磁兼容——电子系统的EMC要求
  • 原文地址:https://blog.csdn.net/weixin_42919342/article/details/134527216