一、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)=>{
});
该文件流读取器每次读取文本当中一行的内容即触发执行一次该回调函数。
4、使用readline
模块在控制台中的简单应用
先用const readline = require('readline');
来引包,使用const rl = readline.createInterface(process.stdin,process.stdout);
来创建输入和输出流的界面,之后使用rl.on('line',(line)=>{});
,该事件在用户在控制台当中输入一行数据,并敲回车之后触发执行其回调函数,回调函数当中的line
即为用户输入的这一行数据,为字符串类型,由于该数据当中可能包含回车换行符,我们通常的处理为line.trim();
5、编码转换模块iconv-lite
在readline
模块当中的使用
使用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事件在数据传递完毕之后触发该回调函数。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。