Прочитать текстовый файл с помощью Node.js?

Мне нужно передать текстовый файл в терминал, а затем прочитать данные из него, как я могу это сделать?

node server.js file.txt

Как мне пройти по пути от терминала, как я могу прочитать это с другой стороны?

Ответ 1

Вы хотите использовать массив 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() и обрабатывать каждый доступный кусок, поскольку он доступен из операционной системы. Тем не менее, чтение файла как такового требует от вас собственного (возможно) инкрементного синтаксического анализа/обработки файла, и некоторый объем буферизации может быть неизбежным.

Ответ 2

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 файлов, вам необходимо использовать синтаксический анализатор (внутри он также должен использовать буферный считыватель).

Ответ 3

Назначьте fs с помощью узла.

var fs = require('fs');

try {  
    var data = fs.readFileSync('file.txt', 'utf8');
    console.log(data.toString());    
} catch(e) {
    console.log('Error:', e.stack);
}

Ответ 4

Я публикую полный пример, который я наконец получил. Здесь я читаю файл 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);
});

Ответ 5

Вы можете использовать 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.');
    })
);

Ответ 6

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)
    })