zoukankan      html  css  js  c++  java
  • node.js 从文件流中读写数据及管道流

    读取数据

    // 引入 fs 模块
    const fs = require('fs');
    
    // 创建可读流
    let readStream = fs.createReadStream('index.txt');
    
    // 保存数据
    let str = ''
    // 读取次数
    let count = 0;
    
    // 处理流事件 data - 当有数据可读时触发。
    
    readStream.on('data',(chunk)=>{
        str += chunk;
        count++;
    })
    
    // end - 没有更多的数据可读时触发。
    readStream.on('end',(chunk)=>{
        console.log(str)
        console.log(count);
    })
    
    // error - 在接收和写入过程中发生错误时触发。
    readStream.on('error',(err)=>{
        console.log(err);
    })

    结果如下:

    成功读取到文本内容,且文件较大时,会分次读取,这里分两次读取

    写入数据

    const fs = require('fs');
    
    let data = '我是从数据库获取的数据,我要以文件流的方式保存起来
    ';
    
    // 创建一个可以写入的流,写入到文件 output.txt 中
    let writeStream = fs.createWriteStream('output.txt');
    
    for(let i = 0;i < 100; i++){
        writeStream.write(data,'utf8');
    }
    
    // 标记写入完成
    writeStream.end();
    
    writeStream.on('finish',()=>{
        console.log('写入完成');
    })
    
    writeStream.on('error',()=>{
        console.log('写入失败');
    })

    output.txt 文件写入了 100 条数据 

    注意: end() 方法 会触发 finish 方法,如果不标记 end , 则无法触发 finish 方法,所以,建议大家写入完成标记end

    管道流:

    针对大型文件的复制

    const fs = require('fs');
    
    // 创建一个可读流
    let readStream = fs.createReadStream('index.txt');
    // 创建一个可写流
    let writeStream = fs.createWriteStream('output.txt');
    
    // 管道读写操作
    // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
    readStream.pipe(writeStream);
    console.log('执行完毕');
  • 相关阅读:
    路由配置系统(views)
    Django-MTV简介
    web框架
    APScheduler
    python单例模式
    mysql_istall_db
    mysql多线程写入出现脏数据(重复数据)问题?
    南方周末 【1999年新年献词】总有一种力量让我们泪流满面
    卡特兰树通向证明
    可持久化线段树(主席树)快速简洁教程 图文并茂 保证学会。kth number例题
  • 原文地址:https://www.cnblogs.com/Sky-Ice/p/9366069.html
Copyright © 2011-2022 走看看