Node.js学习——fs的流管道流,复制图片,文件

2022-01-23  本文已影响0人  wxyzcctn

写入流

const fs = require('fs');

let str = '';

for(let i = 0; i < 500; i++){
    str += '这是一条字符串数据,已经被保存了\n';
}

let writeStream = fs.createWriteStream('../data/outPut.txt',{
        // flags: 'r+',
        // start: 7500
    }
);

// 此时的写入也是一点一点的写入的
writeStream.write(str);

// 使用 utf8 编码写入数据
// writerStream.write(str, 'UTF8');

// 监听写入时的报错
writerStream.on('error', function (err) {
    console.log(err.stack);
});

// 标记写入完成
writeStream.end();
 
// 如果不标记写入完成就无法监听finish状态,就算写入完成也无法监听到finish状态
writeStream.on('finish',()=>{
    console.log('写入完成');
});

读取流

const fs = require('fs');

let readStream = fs.createReadStream('../data/outPut.txt');

let count = 0;
let str = '';

// 设置编码为 utf8。
// readerStream.setEncoding('UTF8');

// 如果文件内容太大就会分为多次读取,监听data会一直不断的读取文件中的所有内容,直到所有内容都被读取完为止
readStream.on('data',(data)=>{
    str+=data;
    count++;
})

// 监听流读取结束
readStream.on('end',()=>{
    console.log(str);
    console.log(count);
})

// 监听流读取出错
readStream.on('error',(err)=>{
    console.log(err);
})

管道流

主要用来复制大文件,可以用来复制图片,压缩包

const fs = require('fs');

let read = fs.createReadStream('../Pictures.rar');

let write = fs.createWriteStream('../data/Pictures.zip');

read.pipe(write);

链式流

文件压缩和解压

# 创建文件压缩。
const fs = require("fs");
const zlib = require('zlib'); // 引入用于压缩文件的模块

// 压缩 input.txt 文件为 input.txt.rar
fs.createReadStream('input.txt')
    .pipe(zlib.createGzip())
    .pipe(fs.createWriteStream('input.txt.rar')); // 这里的input最好带上扩展名.txt,否则解压出来的文件没有扩展名
# 文件解压。
var fs = require("fs");
var zlib = require('zlib');

// 解压 input.txt.rar 文件为 input.txt
fs.createReadStream('input.txt.rar')
    .pipe(zlib.createGunzip())
    .pipe(fs.createWriteStream('input.txt'));
上一篇下一篇

猜你喜欢

热点阅读