使用node.js
当中的可使用内置的readline
模块来确保每次只读取文本当中一行的内容。使用时,与之相关的内置模块还有fs
模块与path
模块。node
const fs = require('fs'); const path = require('path'); const readline = require('readline');
var rl = readline.createInterface({ input:fs.createReadStream(filename) });
其中filename
表明该文件的绝对物理路径,可以使用path.join()
与__dirname
拼接完成。npm
rl.on('line',(line)=>{ });
该文件流读取器每次读取文本当中一行的内容即触发执行一次该回调函数。函数
readline
模块在控制台中的简单应用先用const readline = require('readline');
来引包,使用const rl = readline.createInterface(process.stdin,process.stdout);
来建立输入和输出流的界面,以后使用rl.on('line',(line)=>{});
,该事件在用户在控制台当中输入一行数据,并敲回车以后触发执行其回调函数,回调函数当中的line
即为用户输入的这一行数据,为字符串类型,因为该数据当中可能包含回车换行符,咱们一般的处理为line.trim();
ui
iconv-lite
在readline
模块当中的使用使用npm进行下载并引包编码
const iconvLite = require('iconv-lite');
从 input:fs.createReadStream(filename)
流的源头就进行编码转换。spa
var rl = readline.createInterface({ input:fs.createReadStream(filename).pipe(iconvLite.decodeStream('gbk')) });
其余的代码与以前的同样。code
以前咱们在涉及文件的读写操做时都用的是fs.readFile()
与fs.writeFile()
这两个方法。这两种方法都是对文本内容进行一次性读取,形成在文件操做的过程当中占用较大的内存空间,容易致使机器卡顿。因此咱们在对大文件进行拷贝操做时,一般使用文件流的方式,最常使用.pipe()
方法。blog
fs
模块与path
模块)const fs = require('fs'); const path = require('path');
var reader = fs.createReadStream(readFilename); var writer = fs.createWriteStream(writeFilename);
其中readFilename
为被读取文件的绝对物理路径,writeFilename
为被写入文件的绝对物理路径。事件
.pipe()
方法进行链接reader.pipe(writer); reader.on('end',()=>{ console.log('文件拷贝完成!'); });
该方法至关于从读取流当中接一根管道到写入流当中,数据源源不断地以流的形式进行传递,该方法内部会自动帮咱们控制缓冲区的大小,当数据传递完毕时,会自动退出当前程序。end事件在数据传递完毕以后触发该回调函数。图片