programing

Node.js를 사용하여 텍스트 파일을 읽으시겠습니까?

bestprogram 2023. 8. 25. 23:50

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일반적으로 0번째 항목은 "노드" 인터프리터이고 첫 번째 항목은 노드가 현재 실행 중인 스크립트이며 이후 항목은 명령줄에 전달됩니다.argv에서 파일 이름을 가져오면 파일 시스템 기능을 사용하여 파일을 읽고 내용을 원하는 대로 수행할 수 있습니다.사용 예는 다음과 같습니다.

$ node ./cat.js file.txt
OK: file.txt
This is file.txt!

[편집] @wtfcoder가 언급했듯이, "를 사용하여.fs.readFile()메소드는 콜백 함수에 파일을 제공하기 전에 파일의 전체 내용을 버퍼링하기 때문에 최선의 방법은 아닐 수 있습니다.이 버퍼링은 잠재적으로 많은 메모리를 사용할 수 있지만 더 중요한 것은 node.js의 핵심 기능 중 하나인 비동기식 이벤트 I/O를 활용하지 않는다는 것입니다.

큰 파일(또는 파일)을 처리하는 "노드" 방법은 운영 체제에서 사용 가능한 각 청크를 사용하고 처리하는 것입니다.그러나 이렇게 파일을 읽으려면 파일을 직접(가능하면) 점진적으로 구문 분석/처리해야 하므로 버퍼링이 다소 불가피할 수 있습니다.

노드에 fs를 사용합니다.

var fs = require('fs');

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

임호 씨.fs.readFile()메모리에 있는 모든 파일을 로드하고 모든 파일을 읽을 때까지 콜백하지 않기 때문에 피해야 합니다.

텍스트 파일을 읽는 가장 쉬운 방법은 한 줄씩 읽는 것입니다.버퍼링된 판독기를 권장합니다.

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 파일과 같은 복잡한 데이터 구조의 경우 파서를 사용해야 합니다(내부적으로는 버퍼링된 판독기도 사용해야 합니다).

읽기 스트림과 파이프를 사용하여 모든 파일을 메모리에 한 번도 읽지 않고 한 줄씩 파일을 읽을 수 있습니다.

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.');
    })
);

제가 드디어 일을 하게 된 완벽한 사례를 게시합니다.여기 파일을 읽고 있습니다.rooms/rooms.txt에서.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);
});

비동기적인 삶의 방식:

#! /usr/bin/node

const fs = require('fs');

function readall (stream)
{
  return new Promise ((resolve, reject) => {
    const chunks = [];
    stream.on ('error', (error) => reject (error));
    stream.on ('data',  (chunk) => chunk && chunks.push (chunk));
    stream.on ('end',   ()      => resolve (Buffer.concat (chunks)));
  });
}

function readfile (filename)
{
  return readall (fs.createReadStream (filename));
}

(async () => {
  let content = await readfile ('/etc/ssh/moduli').catch ((e) => {})
  if (content)
    console.log ("size:", content.length,
                 "head:", content.slice (0, 46).toString ());
})();

언급URL : https://stackoverflow.com/questions/9168737/read-a-text-file-using-node-js