Node.js中的文件读取及文件写入

本文详细介绍了Node.js中文件读写的多种方法,包括同步和异步的fs模块操作,如readFile, readFileSync, createReadStream等,以及writeFile, writeFileSync, createWriteStream用于文件写入。同时探讨了在Windows平台下解决文件编码问题的方法,并通过实例对比了同步与异步操作的性能差异。
摘要由CSDN通过智能技术生成

文件读取

Node中文件读取的方式主要有:

fs.readFile(file[, options], callback(error, data))

    fs.readFile('c:\\demo\1.txt', 'utf8', (err, data) => {
        if (err) throw err;
        console.log(data);
    });

fs.readFileSync(file[, options])

    try {
        const data = fs.readFileSync('c:\\demo\1.txt', 'utf8');
        console.log(data);
    } catch(e) {
        // 文件不存在,或者权限错误
        throw e;
    }

fs.createReadStream(path[, options])

    const stream = fs.createReadStream('c:\\demo\1.txt');
    let data = ''
    stream.on('data', (trunk) => {
        data += trunk;
    });
    stream.on('end', () => {
        console.log(data);
    });

由于Windows平台下默认文件编码是GBK,在Node中不支持,可以通过iconv-lite解决

Readline模块逐行读取文本内容

    const readline = require('readline');
    const fs = require('fs');
    const rl = readline.createInterface({
        input: fs.createReadStream('sample.txt')
    });
    rl.on('line', (line) => {
        console.log('Line from file:', line);
    });

文件写入

Node中文件写入的方式主要有:

fs.writeFile(file, data[, options], callback(error))

    fs.writeFile('c:\\demo\a.txt', new Date(), (error) => {
        console.log(error);
    });

fs.writeFileSync(file, data[, options])

    try {
        fs.writeFileSync('c:\\demo\a.txt', new Date());
    } catch (error) {
        // 文件夹不存在,或者权限错误
        console.log(error);
    }

fs.createWriteStream(path[,option])

    var streamWriter = fs.createWriteStream('c:\\demo\a.txt');
    setInterval(() => {
        streamWriter.write(`${new Date}\n`, (error) => {
            console.log(error);
        });
    }, 1000);

node中的异步操作

  1. fs模块对文件的几乎所有操作都有同步和异步两种形式
    • readFile()
    • readFileSync()
  2. 同步和异步区别:
    • 同步调用会阻塞代码的执行,异步则不会
    • 异步调用会将读取任务下达到任务队列,直到任务执行完成才会回调
    • 异常处理方面,同步必须使用 try catch 方式,异步可以通过回调函数的第一个参数
    console.time('sync');
    try {
        var data = fs.readFileSync(path.join('C:\\Users\\iceStone\\Downloads', 'H.mp4'));
        // console.log(data);
    } catch (error) {
        throw error;
    }
    console.timeEnd('sync');
    console.time('async');
    fs.readFile(path.join('C:\\Users\\iceStone\\Downloads', 'H.mp4'), (error, data) => {
        if (error) throw error;
        // console.log(data);
    });
    console.timeEnd('async');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值