Programming/웹프로그래밍

[NodeJs] 파일입출력을 이용해 파일복사, 에디터 구현

쌍쌍바나나 2016. 4. 1. 07:55
반응형

들어가며

  node.js의 fs모듈을 이용해서 파일을 복사하는 방법과 키보드로 입력을 받아서 파일로 작성하는 코드에 대해서 설명해볼까 합니다. shell에서 input path와, output path를 파라미터로 전달해서 복사하는 cp와 동일한 역할을 합니다. Editor 같은 경우에는 우리가 텍스트창에 입력을하고, 입력 후에 텍스트를 파일로 저장하는 방식이라고 생각하시면 됩니다. 

파일 복사하기

  일단 파일에 관련된 작업을 할때는 fs모듈을 사용한다고 생각하시면 됩니다. 최초 readStream을 생성하여 파일을 읽는 Stream을 만들고, writeStream을 생성하여 쓰여질 파일을 만들어 주면 됩니다. input의 내용을 pipe를 통해 output으로 써주면 끝납니다. 여기서 Stream은 데이터가 이동하는 통로라고 생각하시면 됩니다. 

var fs = require('fs');
var input = fs.createReadStream('./input.txt');
var output = fs.createWriteStream('./output.txt');
input.pipe(output); 


Editor 구현하기

  위와 동일하게 파일에 관련된 작업을 하기 때문에 fs모듈을 사용합니다. process.argv.length를 통해 입력받는 파라미터의 체크를 합니다. 입력 값은 "node edit.js <filename>"을 하시면 됩니다. filename은 argv의 3번째 배열인자로 넘어오는 것을 주의하셔야 합니다. 0번은 node 1번은 edit.js 2번은 filename 순입니다. 위와 동일하게 파일을 작성할 수 있는 writeStream을 생성하고, stdin을 통해 키보드로 부터 입력을 받습니다. 만약 exit의 종료조건이 맞으면 콘솔에 'bye'라고 출력한 뒤에 종료합니다. 그 외의 data는 outputStream을 통해 파일에 쓰여집니다. 

var fs = require('fs');
var stdin = process.stdin;

if(process.argv.length !== 3){
	console.log('usage : node editor.js file_name');
	process.exit(0);
}
var fileName = process.argv[2];
var output = fs.createWriteStream(__dirname + "/" + fileName);
stdin.on('data', function(chunk){
	if(chunk.toString().startsWith(".exit")){ // 종료 조건 
		console.log('bye~');
		output.end();
		process.exit(0);
	}else{ // 파일에 입력
		output.write(chunk);
	}
});
// process 종료
process.on('SIGINT', function(){
	console.log('bye~');
	process.exit(0);
});


반응형