【Nodejs笔记】nodejs入门简介_文件读取和写入

这篇简单的整理了nodejs的buffer, 文件读取和写入, 以及流方式读取和写入。

{
    console.log('----------Buffer----------');
    /*
        Buffer(缓冲区)
        8bit=1字节byte
    */

    let str = 'hello 小明'

    let buf = Buffer.from(str);
    console.log(buf)//<Buffer 68 65 6c 6c 6f 20 62 75 66 66 65 72> 二进制表示为16进制
    //创建buffger
    console.log(buf.length); //12 内存长度
    console.log(str.length); //8  字符长度

    let buf2 = Buffer.alloc(10); //1024字节的Buffer
    console.log(buf2.length); //8  字符长度

    buf2[00] = 88;
    buf2[1] = 255;
    buf2[2] = 0xaa;
    buf2[3] = 256; // 只取后面的截取值。
    buf2[10] = 10; //没效果,因为buffer 长度确定后就不能修改。
    console.log(buf2); //<Buffer 58 ff aa 00 00 00 00 00 00 00>
    console.log(buf2[1].toString(16)); // ff


    //buffer 中有 敏感数据 使用 Buffer.allocUnsafe(); //他分配你空间的时候,没清空数据。性能会好。
    let buf3 = Buffer.allocUnsafe(10);
    console.log(buf3); //<Buffer 00 00 00 00 00 00 00 00 00 21>

    let buf4 = Buffer.from("你好,");
    //缓冲区二进制转换字符
    console.log(buf4.toString());//你好,
}

console.log('----------fs File System----------');
{
    const fs = require('fs');

    /*  1.打开文件
    fs 模块一般都有同步和异步两种形式。
    path:
    flags: r 只读 w 写入
    */
    let testFile = fs.openSync('./hello.txt', 'w');
    /* 2.写入文件
    fd: 要写入的对象。
    string: 写入内容
    postion: 写入的位置
    encoding : 默认 utf8
    */
    fs.writeSync(testFile, "你好,说中文。", 10);

    // 3.保存并关闭
    fs.close(testFile);
}
{
    //异步文件写入
    const fs = require('fs');

    fs.open('./hello.txt', 'a', function (err, fd) {
        if (err) {
            console.log(err)
        } else {
            fs.write(fd, "你好,写中文。", function (err) {
                if (err) {
                    console.log(err);
                } else {
                    fs.close(fd, function (err) {
                        if (err) {
                            console.log(err);
                        }
                    });
                }
            });
        }
    });
}

{
    const fs = require('fs');
    fs.writeFile('./aa.txt', '这是测试', function (err) {
        if (!err) {
            console.log("写入成功");
        }
    });
}

{
    //流逝写入
    const fs = require('fs');
    var ws = fs.createWriteStream('./bb.txt');

    //可以给对象绑定一个事件
    // ws.on('open', function () {
    //     console.log('流打开了');
    // });

    //可以给我们对象绑定一次性事件
    ws.once('open', function () {
        console.log('流打开了');
    });

    ws.once('close', function () {
        console.log('流关闭了');
    });

    ws.write('通过可写流写入1');
    ws.write('通过可写流写入2');
    ws.write('通过可写流写入3');
    ws.write('通过可写流写入4');
    ws.write('通过可写流写入5');
    ws.write('通过可写流写入6');

    //关闭流  不能用 ws.close()  因为还没传完就会关闭
    ws.end();
}

/*
{
    const fs = require('fs');
    var rs = fs.createReadStream('/Users/limingxie/Desktop/Like A Cat.mp4');
    // var ws = fs.createWriteStream('');

    rs.once('open', function () {
        console.log('可读流打开了');
    });

    rs.once('close', function () {
        console.log('可读流关闭了');
    });

    rs.on('data', function (data) {
        console.log(data.length);
        console.log(data);
    });
}
*/

//data 方法
{
    const fs = require('fs');
    var rs = fs.createReadStream('/Users/limingxie/Desktop/Like A Cat.mp4');
    var ws = fs.createWriteStream('/Users/limingxie/Desktop/aa.mp4');

    rs.once('open', function () {
        console.log('可读流打开了');
    });

    rs.once('close', function () {
        console.log('可读流关闭了');
        ws.end();// 读完后关闭
    });

    ws.once('open', function () {
        console.log('可写流打开了');
    });

    ws.once('close', function () {
        console.log('可写流关闭了');
    });

    rs.on('data', function (data) {
        // console.log(data.length);
        // console.log(data);
        ws.write(data);
    });
}

//pipe 方法
{
    const fs = require('fs');
    var rs = fs.createReadStream('/Users/limingxie/Desktop/Like A Cat.mp4');
    var ws = fs.createWriteStream('/Users/limingxie/Desktop/bb.mp4');

    rs.pipe(ws);
}

欢迎大家的意见和交流

email: li_mingxie@163.com