Мне нужно передать текстовый файл в терминал, а затем прочитать данные из него, как я могу это сделать?
node server.js file.txt
Как мне пройти по пути от терминала, как я могу прочитать это с другой стороны?
Мне нужно передать текстовый файл в терминал, а затем прочитать данные из него, как я могу это сделать?
node server.js file.txt
Как мне пройти по пути от терминала, как я могу прочитать это с другой стороны?
Вы хотите использовать массив process.argv
для доступа к аргументам командной строки, чтобы получить имя файла и модуль FileSystem (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
обычно имеет длину два, нулевой элемент - это интерпретатор "node", а первый из них - script, который в настоящий момент запущен node, элементы после этого были переданы в командной строке. После того, как вы вытащили имя файла из argv, вы можете использовать функции файловой системы для чтения файла и делать все, что хотите, с его содержимым. Пример использования будет выглядеть так:
$ node ./cat.js file.txt
OK: file.txt
This is file.txt!
[Изменить] Как упоминает @wtfcoder, использование метода "fs.readFile()
" может быть не лучшей идеей, поскольку оно будет буферизовать все содержимое файла, прежде чем придать его функции обратного вызова. Эта буферизация может потенциально использовать большую часть памяти, но, что более важно, она не использует одну из основных функций node.js - асинхронный, событие ввода/вывода.
"node" способ обработки большого файла (или любого файла, действительно) должен был бы использовать fs.read()
и обрабатывать каждый доступный кусок, поскольку он доступен из операционной системы. Тем не менее, чтение файла как такового требует от вас собственного (возможно) инкрементного синтаксического анализа/обработки файла, и некоторый объем буферизации может быть неизбежным.
IMHO, 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 файлов, вам необходимо использовать синтаксический анализатор (внутри он также должен использовать буферный считыватель).
Назначьте fs с помощью узла.
var fs = require('fs');
try {
var data = fs.readFileSync('file.txt', 'utf8');
console.log(data.toString());
} catch(e) {
console.log('Error:', e.stack);
}
Я публикую полный пример, который я наконец получил. Здесь я читаю файл rooms/rooms.txt
из script rooms/rooms.js
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 для чтения файла строки за строкой, не считывая весь файл в память один раз.
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.');
})
);
const fs = require('fs')
fs.readFile('newdemo.txt',(err,data)=>{
if(err) throw err
console.log(data.toString())
})
или
const fs = require('fs')
fs.readFile('newdemo.txt','utf8',(err,data)=>{
if(err) throw err
console.log(data)
})