반응형
들어가며
파일 입출력에 대해서 설명을 해드리겠습니다. NodeJs에서는 File I/O의 주요 함수는 동기식, 비동기식 그리고 Stream을 이용한 방식이 있습니다. NodeJs는 비동기 방식이기 때문에 순차적으로 함수를 수행하지 않습니다. 그렇기 때문에 만약에 큰 파일을 읽고 있는 상태에서, 만약 그 파일을 쓰는 코드를 작성할 경우에는 에러가 발생 할 수도 있으니 주의하셔야 합니다. 이런 경우에는 동기식으로 파일 읽기/쓰기를 하시면 문제없이 사용할 수 있습니다.
파일입력 주요 함수
- readFile('filename', 'encoding', callback(error, data));
- readFileSync('fileㄱname', 'encoding') : data
- writeFile('filename', data ,'encoding', callback(error));
- writeFileSync('filename', data, 'encoding');
- readdir('path', callback(error, files[]));
- readdirSync('path') : files[]
- createReadStream()
- createWriteStream()
비동기 파일 읽기/쓰기
파일을 처리할때는 fs모듈을 사용하시면 됩니다. 최초 파일을 읽을때 encoding문제가 발생할 수 있으니 'utf8'로 설정해 줍니다. 파일을 작성할 때도 동일하게 'utf8'을 지정해주면 됩니다. 동기식은 순차적으로 실행하지 않기 때문에 순서가 중요한 작업에서는 작성하시에는 동기식을 사용하는게 좋습니다.
// 비동기식 파일 읽기
var fs = require('fs');
fs.readFile('file.txt', 'utf8', function(error, data) {
console.log(data);
});
// 비동기식 파일 쓰기
var fs = require('fs');
var data = "hi banana";
fs.writeFile('text.txt', data, 'utf8', function(error) {
console.log('writeFile completed');
});
동기 파일 읽기/쓰기
순서가 중요한 작업에서 사용하시면 됩니다. 만약 파일을 읽은 뒤에 그 내용을 바탕으로 어떤 처리를 하고, 마지막으로 파일에 쓰는 작업을 할 때 사용하시면 됩니다. 만약 이 작업을 비동기식으로 한다면 읽는 와중에 파일에 써지는 현상이 발생 할 수 있습니다. (파일 크기에 따라)
// 동기식 파일 읽기
var fs = require('fs');
var data = fs.readFileSync('text.txt', 'utf8');
console.log(data);
// 동기식 파일 쓰기
var fs = require('fs');
var data = 'hi banana';
fs.writeFileSync('text.txt', data, 'utf8');
console.log('writeFileSync completed');
대용량 파일 읽기/쓰기
파일을 복사하거나, 쓰는 작업을 계속 하는 경우 (Editor 작성)에는 아래오 같은 방법을 사용하시면 됩니다. readStream과 writeStream을 통해 데이터를 읽고, 쓰기가 가능합니다. input.pipe(writer)를 하시면 파일을 복사한는 작업 또한 할 수 있습니다.
// 대용량 파일 읽기
var fs = require('fs');
var input = fs.createReadStream('./bigfile.txt');
input.on('data', function(chunk){
console.log('read:' + chunck.toString());
});
// 대용량 파일 쓰기
var fs = require('fs');
var writer = fs.createWriteStream('bigfile.txt');
for (var i = 0; i < 1000; i ++) {
writer.write('banana, #' + i + '\n');
}
writer.end('sold out');
writer.on('finish', function() {
console.log('finish')
});
반응형
'Programming > 웹프로그래밍' 카테고리의 다른 글
[NodeJS] TCP 서버프로그래밍 - net 모듈 이용하기 (5) | 2016.04.04 |
---|---|
[NodeJs] 파일입출력을 이용해 파일복사, 에디터 구현 (0) | 2016.04.01 |
[NodeJs] NodeJs 이벤트 사용하기 - Event Emitter (0) | 2016.03.29 |
[NodeJs] NodeJs 입력받기 - readline 모듈사용 (1) | 2016.03.29 |
[NodeJs] 내장 모듈 사용하기 (os, url, querystring, util) (0) | 2016.03.29 |