node js中的流操作

2017-07-26  本文已影响0人  blank的小粉er
var fs = require("fs");
function testReadStream(){
    // fs 对象继承 流对象stream对象
    // 根据路径将文件读取到可读流对象中
    var reader = fs.createReadStream("./name.txt");

    var result = "";
    // 监听每次读取的数据 当文件很大就必须使用可读流
    reader.on("data",(chuck)=>{
        result += chuck;
        // 进度条
        // result/总字节数
    })

    reader.on("error",(err)=>{
        if(err){
            console.log("读取是发生错误");
        }
    });

    reader.on("end",()=>{
        console.log(result.toString());
        console.log("读取完成");
    });

    var writer = fs.createWriteStream("newName.txt");
    // pipe 管道  将可读流里面的数据 管道 写入到可写流中
    // 管道的好处 当前文件比较大的时候可以分多次进行写入
    reader.pipe(writer);
}

//testReadStream();

function testWriteStream(){
    var writer = fs.createWriteStream("demo.txt");
    var intArray = new Uint8Array([65,66,67,68]);
    console.log(intArray);
    var buffer = Buffer.from(intArray)
    console.log(buffer.toString());
    writer.write(buffer,(err)=>{
        if(err){
            console.log("写入发生错误",err);
        }else {
            console.log("succes 写入成功");
        }
    })
}
//testWriteStream();

// 可以实现自定义的文件拷贝方法
// 如果要实现文件夹的拷贝 需要递归实现
// 需要自己创建目录 和文件
function testCopy(src,dest){
    var fs = require("fs");
    var reader = fs.createReadStream(src);
    var writer = fs.createWriteStream(dest);
    reader.pipe(writer);
}

//testCopy("./test","./copytest");

function testZip(){
    var fs = require("fs");
    var zlib = require("zlib");
    var reader = fs.createReadStream("demo.txt");
    var zlibObj = zlib.createGzip();
    // 将读取到的数据 经过中间管道 压缩 然后在写入到可写流中
    reader.pipe(zlibObj).pipe(fs.createWriteStream("demo.zip"));
}

//testZip();

function testUnZip(){
    //实现解压缩文件
    var fs = require("fs");
    var zlib = require("zlib");
    var reader = fs.createReadStream("demo.zip");
    // 解压缩的对象
    var unzipObj = zlib.createGunzip();
    reader.pipe(unzipObj).pipe(fs.createWriteStream("unzip.txt"));
}
//testUnZip();
上一篇 下一篇

猜你喜欢

热点阅读