使用Node.js读取文本文件?
我需要在终端传递一个文本文件,然后从中读取数据,我该怎么做?
node server.js file.txt
我如何通过终端的路径,我怎么读取另一端?
您需要使用process.argv
数组来访问命令行参数以获取文件名和文件系统模块(fs)来读取文件。 例如:
// Make sure we got a filename on the command line.
if (process.argv.length < 3) {
console.log('Usage: node ' + process.argv[1] + ' FILENAME');
process.exit(1);
}
// Read the file and print its contents.
var fs = require('fs')
, filename = process.argv[2];
fs.readFile(filename, 'utf8', function(err, data) {
if (err) throw err;
console.log('OK: ' + filename);
console.log(data)
});
为了减少这个问题, process.argv
通常有两个长度,第零个项目是“节点”解释器,第一个项目是当前正在运行的脚本,之后的项目在命令行上传递。 一旦你从argv中提取了一个文件名,那么你就可以使用文件系统函数来读取文件并根据你的内容做任何你想做的事情。 示例用法如下所示:
$ node ./cat.js file.txt
OK: file.txt
This is file.txt!
[编辑]正如@wtfcoder所提到的,使用“ fs.readFile()
”方法可能不是最好的主意,因为它会在将文件传递给回调函数之前缓冲文件的全部内容。 这种缓冲可能会使用大量内存,但更重要的是,它不利用node.js的一个核心功能 - 异步,偶数I / O。
处理大文件(或任何文件,真的)的“节点”方法是使用fs.read()
并处理每个可用块,因为它可从操作系统获得。 但是,按照这种方式读取文件需要您自己(可能)对该文件进行增量分析/处理,并且可能不可避免地存在一些缓冲区。
恕我直言, fs.readFile()
应该避免,因为它加载内存中的所有文件,它不会调用回调,直到所有文件已被读取。
读取文本文件的最简单方法是逐行读取它。 我推荐一个BufferedReader:
new BufferedReader ("file", { encoding: "utf8" })
.on ("error", function (error){
console.log ("error: " + error);
})
.on ("line", function (line){
console.log ("line: " + line);
})
.on ("end", function (){
console.log ("EOF");
})
.read ();
对于像.properties或json文件这样复杂的数据结构,您需要使用解析器(在内部它也应该使用缓冲读取器)。
您可以使用readstream和pipe逐行读取文件,而无需将所有文件一次读入内存。
var fs = require('fs'),
es = require('event-stream'),
os = require('os');
var s = fs.createReadStream(path)
.pipe(es.split())
.pipe(es.mapSync(function(line) {
//pause the readstream
s.pause();
console.log("line:", line);
s.resume();
})
.on('error', function(err) {
console.log('Error:', err);
})
.on('end', function() {
console.log('Finish reading.');
})
);
链接地址: http://www.djcxy.com/p/52281.html