2017. 11. 16. 11:26ㆍJavaScript/NodeJS
파일 시스템은 fs 모듈을 로딩함으로 사용할 수 있다.
var fs = require("fs");
node.js는 유닉스 개발자가 개발한걸로 알려졌서 그런지 모듈의 대부분 메소드가 유닉스의 명령어와 비슷한 듯 하다.
수 많은 메소드들이 있지만 주로 사용하게 될 몇 가지만 확인해 보도록 한다.
나머지는 API를 참고 하며 진행해야 할 듯...ㅡㅡ;;
모든 파일 시스템은 동기와 비동기를 지원한다.
예를 들어
fs.readFile("D:\\temp\\out.log", function(err, data) { ... } );
는 비동기 이지만
fs.readFileSync("D:\\temp\\out.log");
는 동기 형식으로 거의 대부분의 메소드에서 Sync를 붙여 동기식으로 구현이 가능하다.
하지만 나는 비동기 형식만 여기에 작성할 것이다.
1. fs.stat(file, callback);
파일의 상태 정보를 확인한다.
callback :
err<Error> : 에러 정보
stats<Stats> : 상태 정보
fs.stat("D:\\temp\\out.log", (err, stats) => {
if( err ) { throw err; }
console.log( stats ); // 파일 정보
console.log( "isFIle : " + stats.isFile() ); // 파일 여부
console.log( "isDirectory : " + stats.isDirectory() ); // 디렉토리 여부
console.log( "isBlockDevice : " + stats.isBlockDevice() ); // 블럭타입의 기기 여부
console.log( "isCharacterDevice : " + stats.isCharacterDevice() ); // 문자타입의 기기 여부
console.log( "isSymbolicLink : " + stats.isSymbolicLink() ); // 심볼릭 링크 여부
console.log( "isFIFO : " + stats.isFIFO() ); // FIFO(유닉스 네임드 파이프) 여부
console.log( "isSocket : " + stats.isSocket() ); // 도메인 소켓 여부
} );
결과
Stats {
dev: 3296761668,
mode: 33206,
nlink: 1,
uid: 0,
gid: 0,
rdev: 0,
blksize: undefined,
ino: 5348024557619625,
size: 0,
blocks: undefined,
atimeMs: 1499646197248.9653,
mtimeMs: 1510624392877.0774,
ctimeMs: 1510624392877.0774,
birthtimeMs: 1499646197248.9653,
atime: 2017-07-10T00:23:17.249Z,
mtime: 2017-11-14T01:53:12.877Z,
ctime: 2017-11-14T01:53:12.877Z,
birthtime: 2017-07-10T00:23:17.249Z }
=============================================================
isFIle : true
isDirectory : false
isBlockDevice : false
isCharacterDevice : false
isSymbolicLink : false
isFIFO : false
isSocket : false
2. fs.rename(source, target, callback);
파일명을 변경한다.
callback :
err<Error> : 에러 정보
fs.rename("D:\\temp\\out.log", "D:\\temp\\output.log", (err) => {
if( err) throw err;
fs.stat("D:\\temp\\output.log", (err, stats) => {
if( err) throw err;
console.log( stats );
});
});
결과는 파일 명을 변경하고 해당 파일 명의 정보를 출력한다.
3. fs.exists(file, callback);
파일의 존재 여부를 확인한다.
callback :
exists<Boolean> : 존재 여부
fs.exists("D:\\temp\\output.log", (exists) => {
console.log( exists ? "있음" : "없음" );
});
4. fs.appendFile(file, data, callback);
파일에 내용을 추가한다.
파일이 존재하지 않을 경우 파일을 생성한다.
callback :
err<Error> : 에러 정보
fs.appendFile("D:\\input.txt", "Data to append....", (err) => {
if( err ) {
console.error(err);
return;
}
console.log("Data 추가 완료");
});
5. fs.open(file, flags[, mode], callback)
파일을 오픈할 때 사용된다.
flags :
r - 파일을 읽는다. 파일이 없을 경우 예외 발생
r+ - 파일을 읽고 쓴다, 파일이 없을 경우 예외 발생
w - 파일을 쓴다. 파일이 없는 경우 생성하고 있는경우는 덮어 씌운다.
wx - w와 비슷하지만 파일이 있는경우 실패한다.
w+ - 파일을 읽고 쓴다. 파일이 없는 경우 생성하고 있을경우 덮어 씌운다.
wx+ - w+와 비슷하지만 파일이 있는경우 실패한다.
a - 파일을 추가한다. 파일이 없는 경우 생성한다.
ax - a와 비슷하지만 파일이 있는경우 실패한다.
a+ - 파일을 읽고 추가한다. 파일이 없으면 생성한다.
ax+ - a+와 비슷하지만 파일이 없는 경우 실패한다.
callback :
err<Error> : 에러 정보
fd<integer> : 타입의 결과값
fs.open("D:\\temp\\out.log", "wx", (err, fd) => {
if( err ) {
if( err.code == "ENOENT" ) {
console.error( "파일이 존재하지 않음.");
return;
} else if( err.code = "EEXIST" ) {
console.error( "이미 파일이 있습니다.");
return;
}
throw err;
}
console.log( fd );
});
6. fs.readFile(file[, options], callback)
파일 내용을 읽는다.
callback :
err<Error> : 에러정보
data<String|Buffer> : 파일 내용
나는 input.txt 라는 파일 생성하고 내용에 "Test File System.."이라고 입력 후 저정하였다.
옵션 없이 실행할 경우와 있는 경우의 data 값은 다르게 출력이 된다.
옵션이 없는 경우 기본적으로 인코딩되어 출력이 된다.
// 옵션이 없는 경우
fs.readFile("D:\\input.txt", (err, data) => {
if( err ) {
console.error("read file error : " + err );
return;
}
console.log( data );
});
결과 :
<Buffer 54 65 73 74 20 46 69 6c 65 20 53 79 73 74 65 6d 2e 2e>
//옵션이 있는 경우
fs.readFile("D:\\input.txt", "utf8", (err, data) => {
if( err ) {
console.error("read file error : " + err );
return;
}
console.log( data );
});
결과 :
Test File System..
7. fs.writeFile(file, data[, options], callback)
파일을 쓴다.
callback :
err<Error> : 에러 정보
fs.writeFile("D:\\test.txt", "hello world", (err) => {
if( err ) {
console.error("write file error : " + err );
return;
}
console.log("write completed..");
});
결과 :
write completed..
파일을 읽거 나 쓸 경우 위의 방식이 아닌 fis.open()을 사용하고 fs.read() 와 fs.write()를 사용할 수 있다.
파일 읽기 :
fs.open("D:\\test.txt", "r", (err, fd) => {
if( err ) {
console.error("open error : " + err );
return;
}
var buf = new Buffer(5);
fs.read(fd, buf, 0, buf.length, null, (err, byteRead, buffer) => {
if( err ) {
console.error("read error : " + err );
return;
}
console.log( err, byteRead, buffer);
fs.close(fd, () => {
console.log( "Done." );
});
});
});
결과 :
null 5 <Buffer 61 64 64 20 44>
Done.
파일 쓰기 :
fs.open("D:\\test.txt", "w", (err, fd) => {
if( err ) {
console.error("open error : " + err );
return;
}
var buf = new Buffer("add Data...\n");
fs.write(fd, buf, 0, buf.length, null, (err, written, buffer)=> {
if( err ) {
console.error("write error : " + err );
return;
}
console.log( err, written, buffer);
fs.close(fd, () => {
console.log( "Done." );
});
} );
});
결과 :
null 12 <Buffer 61 64 64 20 44 61 74 61 2e 2e 2e 0a>
Done.
맘은 더 쓰고 싶은데...ㅡㅡ
귀찮다.. 나머지는 찾으면서~~
'JavaScript > NodeJS' 카테고리의 다른 글
[NodeJS] 서버 만들기(HTTP Server) - 2 (0) | 2017.11.28 |
---|---|
[NodeJS] 서버 만들기(HTTP Server) - 1 (0) | 2017.11.27 |
[NodeJS] Path (0) | 2017.11.13 |
[NodeJS] Event 활용 - 연결 및 제거 (0) | 2017.11.10 |
[NodeJS] 모듈, 캐싱 그리고 exports (0) | 2017.11.08 |