Read a text file using Node.js?
我需要在终端中传入一个文本文件,然后从中读取数据,我该怎么做?
1 | node server.js file.txt |
如何从终端传递路径,如何在另一端读取?
您将要使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 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) }); |
为了解决这个问题,
1 2 3 | $ node ./cat.js file.txt OK: file.txt This is file.txt! |
[编辑]正如@wtfcoder所提到的,使用"
处理大文件(或任何文件,实际上)的"节点"方式是使用
应避免使用IMHO,
读取文本文件的最简单方法是逐行读取。我推荐一个BufferedReader:
1 2 3 4 5 6 7 8 9 10 11 | 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文件这样的复杂数据结构,您需要使用解析器(在内部它也应该使用缓冲读取器)。
将fs与节点对齐。
1 2 3 4 5 6 7 8 | var fs = require('fs'); try { var data = fs.readFileSync('file.txt', 'utf8'); console.log(data.toString()); } catch(e) { console.log('Error:', e.stack); } |
我发布了一个完整的例子,我终于开始工作了。这里我从脚本
1 2 3 4 5 6 7 8 9 | var fs = require('fs'); var path = require('path'); var readStream = fs.createReadStream(path.join(__dirname, '../rooms') + '/rooms.txt', 'utf8'); let data = '' readStream.on('data', function(chunk) { data += chunk; }).on('end', function() { console.log(data); }); |
您可以使用readstream和pipe逐行读取文件,而无需将所有文件读入内存一次。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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.'); }) ); |