터미널에 텍스트 파일을 전달한 다음 데이터를 읽어야합니다. 어떻게해야합니까?
node server.js file.txt
터미널에서 경로를 어떻게 전달합니까? 다른 쪽에서 어떻게 읽습니까?
터미널에 텍스트 파일을 전달한 다음 데이터를 읽어야합니다. 어떻게해야합니까?
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나누면 보통 길이 2가됩니다. 0 번째 항목은 "노드"인터프리터이고 첫 번째 항목은 노드가 현재 실행중인 스크립트이며 그 이후의 항목은 명령 줄에 전달됩니다. argv에서 파일 이름을 가져 오면 파일 시스템 함수를 사용하여 파일을 읽고 원하는 내용을 수행 할 수 있습니다. 샘플 사용법은 다음과 같습니다.
$ node ./cat.js file.txt
OK: file.txt
This is file.txt!
[편집] @wtfcoder가 언급했듯이 " fs.readFile()"메서드를 사용하는 것은 파일을 콜백 함수에 양보하기 전에 파일의 전체 내용을 버퍼링하므로 최선의 방법이 아닐 수 있습니다. 이 버퍼링은 잠재적으로 많은 메모리를 사용할 수 있지만 더 중요한 것은 node.js의 핵심 기능 중 하나 인 비동기 이벤트 I / O를 활용하지 않는다는 것입니다.
큰 파일 (또는 모든 파일)을 처리하는 "노드"방식 fs.read()은 운영 체제에서 사용 가능한 각 청크 를 사용 하고 처리하는 것입니다. 그러나 파일을 그렇게 읽으려면 파일에 대한 (아마도) 증분 파싱 / 처리를 수행해야하며 어느 정도의 버퍼링이 불가피 할 수 있습니다.
var lines = data.split(/\r?\n/);, 그러면 배열 "lines"에 각 행이 있습니다.
노드가있는 Usign fs.
var fs = require('fs');
try {
var data = fs.readFileSync('file.txt', 'utf8');
console.log(data.toString());
} catch(e) {
console.log('Error:', e.stack);
}
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.readFile()또는 .NET을 사용하지 않을 이유가 없습니다 fs.readFileSync(). 눈에 띄게 기다리려면 거대한 파일이어야합니다. package.json 같은 JSON 구성 파일이 1킬로바이트에서 할 가능성이 높습니다 그래서 당신은 단지 수 fs.readFile()와 JSON.parse()그것.
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.');
})
);
마침내 작업 한 완전한 예제를 게시하고 있습니다. 여기 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);
});