node.js当中的readline模块与文件流操作

一、readline模块

使用node.js当中的可以使用内置的readline模块来确保每次只读取文本当中一行的内容。使用时,与之相关的内置模块还有fs模块与path模块。

1、引用相关模块
const fs = require('fs');
const path = require('path');
const readline = require('readline');
2、创建文件流读取器
var rl = readline.createInterface({
    input:fs.createReadStream(filename)
});

其中filename代表该文件的绝对物理路径,可使用path.join()__dirname拼接完成。

3、读取文本当中的一行内容
rl.on('line',(line)=>{
    
});

该文件流读取器每次读取文本当中一行的内容即触发执行一次该回调函数。

《node.js当中的readline模块与文件流操作》

4、使用readline模块在控制台中的简单应用

先用const readline = require('readline');来引包,使用const rl = readline.createInterface(process.stdin,process.stdout);来创建输入和输出流的界面,之后使用rl.on('line',(line)=>{});,该事件在用户在控制台当中输入一行数据,并敲回车之后触发执行其回调函数,回调函数当中的line即为用户输入的这一行数据,为字符串类型,由于该数据当中可能包含回车换行符,我们通常的处理为line.trim();

《node.js当中的readline模块与文件流操作》

5、编码转换模块iconv-litereadline模块当中的使用

使用npm进行下载并引包

const iconvLite = require('iconv-lite');

input:fs.createReadStream(filename) 流的源头就进行编码转换。

var rl = readline.createInterface({
    input:fs.createReadStream(filename).pipe(iconvLite.decodeStream('gbk'))
});

其他的代码与之前的一样。

二、文件流操作

之前我们在涉及文件的读写操作时都用的是fs.readFile()fs.writeFile()这两个方法。这两种方法都是对文本内容进行一次性读取,造成在文件操作的过程中占用较大的内存空间,容易导致机器卡顿。所以我们在对大文件进行拷贝操作时,通常使用文件流的方式,最常使用.pipe()方法。

1、引入核心模块(fs模块与path模块)
const fs = require('fs');
const path = require('path');
2、创建文件读取流与文件写入流
var reader = fs.createReadStream(readFilename);
var writer = fs.createWriteStream(writeFilename);

其中readFilename为被读取文件的绝对物理路径,writeFilename为被写入文件的绝对物理路径。

3、使用.pipe()方法进行连接
reader.pipe(writer);
reader.on('end',()=>{
    console.log('文件拷贝完成!');
});

该方法相当于从读取流当中接一根管道到写入流当中,数据源源不断地以流的形式进行传递,该方法内部会自动帮我们控制缓冲区的大小,当数据传递完毕时,会自动退出当前程序。end事件在数据传递完毕之后触发该回调函数。

    原文作者:倩儿爱甜食
    原文地址: https://segmentfault.com/a/1190000011378384
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞