『파일을 직접 열고 닫으면서
읽거나 쓰기』
______________________________________________
실제로 파일을 읽거나 쓸 때는 한꺼번에 모든 데이터를 읽거나 쓰지 않고 조금씩 읽거나 쓰는 방식을 사용하는 경우도 많다.
또한, 다른 곳에서 받아 온 데이터를 파일에 쓰는 경우도 있기 때문에 파일을 다루는 다양한 방식이 따로 정의되어 있다.
파일을 직접 열고 닫으면서 읽거나 쓰고 싶다면 다음 메소드들을 사용할 수 있다.
메소드 이름 |
설명 |
open(path, flags, [mode], [callback] |
파일을 연다. |
read(fd, buffer, offset, length, position, [callback] |
지정한 부분의 파일 내용을 읽어 들인다. |
write(fd, buffer, offset, length, position, [callback] |
파일의 지정한 부분에 데이터를 쓴다. |
close(fd, [callback]) |
파일을 닫아 준다. |
[표] 파일을 직접 열고 닫으면서 일부분만 읽거나 쓰기 위한 메소드
파일의 내용을 일부분만 읽어 들이려면 먼저 open() 메소드로 파일을 열어야 한다. 파일을 열고 데이터 쓰기 기능을 만들려면 새로운 자바스크립트 파일 ch04_test8.js를 만들고 다음 코드를 입력한다.
-----------------------------------------------------------
var fs = require('fs');
// 파일에 데이터를 쓴다.
fs.open('./output.txt', 'w', function(err, fd){
if(err) throw err;
var buf = new Buffer('안녕!\n');
fs.write(fd, buf, 0, buf.length, null, function(err, written, buffer){
if(err) throw err;
console.log(err, written, buffer);
fs.close(fd, function(){
console.log('파일 열고 데이터 쓰고 파일 닫기 완료.');
});
});
});
-----------------------------------------------------------
▲ 파일을 열어 데이터를 쓴 후 파일을 닫는 과정
먼저 open() 메소드를 호출하면 파이릉ㄹ 열 수 있다. 그리고 파일을 열면 write() 메소드를 사용해서 데이터를 쓸 수 있다.
데이터는 필요한 만큼 Buffer 객체 안에 쓴다. 파일에 데이터를 쓰고 나면 close() 메소드를 호출하여 파일을 닫는다.
이렇게 각 메소드를 호출할 때마다 콜백 함수를 파라미터로 전달하므로 각각의 기능이 실행을 끝냈을 때 그 다음 메소드를 실행한다.
파일을 열기 위해 open() 메소드를 호출할 때 동시에 세 개의 파라미터가 전달되었다. 첫 번째는 파일의 이름, 두 번째는 파일을 읽거나 쓰기 위한 플래그이다.
대표적인 플래그로는 'r', 'w', 'w+', 'a+' 가 있다.
플래그 |
설명 |
'r' |
읽기에 사용하는 플래그이다. 파일이 없으면 예외가 발생한다. |
'w' |
쓰기에 사용하는 플래그이다. 파일이 없으면 만들어지고 파일이 있으면 이전 내용을 모두 삭제한다. |
'w+' |
읽기와 쓰기에 모두 사용하는 플래그이다. 파일이 없으면 만들어지고 파일이 있으면 이전 내용을 모두 삭제한다. |
'a+' |
읽기와 추가에 모두 사용하는 플래그이다. 파일이 없으면 만들어지고 있으면 이전 내용에 새로운 내용을 추가한다. |
[표] 파일을 열 때 사용하는 대표적인 플래그
코드에서는 'w' 플래그를 사용하였으므로 쓰기 작업만을 위해 파일을 연다. 콜백 함수안에서는 버퍼 객체를 하나 만들고 '안녕!'이라는 글자를 넣은 후 write() 메소드를 호출하여 파일에 내용을 쓴다.
파일이 열리면 fd 객체를 전달받을 수 있으므로 이 fd 객체로 파일을 구별한다. 파일에 데이터를 쓸 때 어느 위치에 쓸 것인지 정할 수 있다.
코드를 모두 입력한 후 실행하면 파일이 만들어지는데, 다음과 같이 그 파일에 쓴 내용이 콘솔 창에 표시된다.
▲ 파일을 열고 데이터를 쓴 후 파일을 닫는 프로그램의 실행 결과
※ 읽어 들인 파일 내용이 콘솔에 출력되지 않을 경우에는 명령 프롬프트에서 실행하기 바란다.
이번에는 앞에서 만들어진 파일을 읽어 들이는 코드를 만들어보자.
파일을 읽어 들일 때도 파일을 먼저 열고 난 후 데이터를 읽어 들인다.
---------------------------------------------------------------------------------
var fs = require('fs');
// 파일에서 데이터를 읽어 들인다.
fs.open('./output.txt', 'r', function(err, fd){
if(err) throw err;
var buf = new Buffer(10);
console.log('버퍼 타입 : %s', Buffer.isBuffer(buf));
fs.read(fd, buf, 0, buf.length, null, function(err, bytesRead, buffer){
if(err) throw err;
var inStr = buffer.toString('utf8', 0, bytesRead);
console.log('파일에서 읽은 데이터 : %s', inStr);
console.log(err, bytesRead, buffer);
fs.close(fd, function(){
console.log('output.txt 파일을 열고 읽기 완료') ;
});
});
});
---------------------------------------------------------------------------------
Buffer 객체는 바이너리 데이터를 읽고 쓰는 데 사용한다. 새로운 버퍼 객체를 만들기 위해서는 new 연산자를 사용하며,
그 안에 들어갈 바이트(byte) 데이터의 크기만 지정하면 된다. write() 메소드를 사용해 문자열을 버퍼에 쓰거나 처음부터 문자열을 사용해 버퍼 객체를 만들 수도 있다. 파일을 실행하면 파일에서 읽은 데이터가 콘솔 창에 출력된다.
▲ 파일을 열고 데이터를 읽은 후 콘솔 창에 보여준 결과
'Study > Node.js' 카테고리의 다른 글
[노드JS] 스트림 단위로 파일 읽고 쓰기 (0) | 2019.03.23 |
---|---|
[노드JS] 버퍼 객체 사용하는 방법 알아보기 (0) | 2019.03.23 |
[노드JS] 파일 다루기 (0) | 2019.03.23 |
[노드JS] 계산기 객체를 모듈로 만들어 보기 (0) | 2019.03.23 |
[노드JS] 이벤트 보내고 받기 (0) | 2019.03.23 |