경로 다루기
path
경로 정보
- 현재 실행 파일 경로, 폴더 경로
__filename
__dirname
var path = __dirname + '/image.png';
경로 다듬기
path.normalize()
..
: 부모 폴더.
: 같은 폴더
경로 구성 요소
path.basename()
: 파일 이름, 경로 중 마지막 요소path.dirname()
: 파일이 포함된 폴더 경로path.extname()
: 확장자
경로 구성 객체
var info = pathUtil1.parse('/usr/temp/local/image.png');
console.log(info);
{ root: '/',
dir: '/usr/temp/local',
base: 'image.png',
ext: '.png',
name: 'image' }
경로 만들기
pathUtil.sep
: 구분자 /, \pathUtil.join()
: 경로 붙이기pathUtil.format()
: 경로 만들기
파일 시스템
파일 시스템 모듈 : fs
주요기능
- 파일 생성/읽기/쓰기/삭제
- 파일 접근성/속성
- 디렉토리 생성/읽기/삭제
- 파일 스트림
- 모든 플랫폼에 100% 호환되지 않음
특징
- 비동기와 동기 방식 함수 모두 제공
- 비동기식 : callback -> non-block
-
동기식 : + Sync -> block 성능상 주의 , 반환값 이용
- 동기식
try{
var data = fs.readFileSync('textfile.txt','utf8');
}catch(exception){
console.error('ReadFile Error : ', exception);
}
- 비동기식
fs.readFile('textfile.txt','utf8',function(error,data){
if(err){
console.error('ReadFile Error : ', exception);
}else{
//정상처리
}
});
파일 시스템 다루기
파일 다루기
파일 다루기
- File descriptor
- File Path
FileDescription로 파일 다루기
fs.read(fd, buffer, offset, length, position, callback);
fs.readSync(fd, buffer, offset, length, position);
파일 경로로 파일 다루기
fs.readFile(filename, option, callback);
fs.readFileSync(filename, option);
FileDescription 얻기 : Open 함수
var fd = fs.openSync(path, flags)
fs.open(path,flags,function(err,fd){});
flag
r
: readw
: writea
: add
File Close
fs.close(fd, callback)
fs.closeSync(fd)
파일 종류
- 문자열 읽기 : 인코딩
- 바이너리 읽기 : buffer
- 인코딩 설정 안하면 buffer로 읽는다.
파일 읽기 예제 - 파일 디스크립터, 동기식
var fd = fs.openSync(file, 'r'); // Get File descriptor
var buffer = new Buffer(10); // Make Buffer
var byte = fs.readSync(fd, buffer, 0, buffer.length, 0); // Read File
console.log('File Contenst : ', buffer.toString('utf-8')); // Set Encoding
fs.closeSync(fd); // File Close
파일 읽기 예제 - 파일 디스크립터, 비동기
fs.open(file,'r',function(err,fd2){
var buffer2 = new Buffer(20);
fs.read(fd2, buffer2, 0, buffer2.length, 10, function(err,byteRead,buffer){
console.log('File Read ', byteRead, 'bytes');
console.log('File Content : ', buffer.toString('utf-8'));
fs.close(fd,function(err){});
})
})
파일 읽기 - 동기식
var data = fs.readFileSync(file, 'utf-8');
var imageData = fs.readFileSync('./image.jpg');
파일 읽기 - 비동기, 인코딩
fs.readFile(file, 'UTF-8', function (err,name) {
});
파일 상태 - 존재 확인
파일 존재 확인하기
fs.access(Sync)
fs.stat(Sync)
파일 접근 가능 확인하기
fs.access(path, callback)
fs.accessSync(path, model)
접근 모드
fs.F_OK
: 존재 확인fs.R_OK, W_OK, X_OK
: 읽기 / 쓰기 / 실행 여부 확인
파일 접근 여부 확인 후 읽기 - 동기
try{
fs.accessSync(file,fs.F_OK);
}catch(exception){
//파일 없음
}
파일 접근 여부 확인 후 읽기 - 비동기
fs.access(file, fs.F_OK | fs.R_OK, function(err){
if(err){
//에러 처리
}
fs.readFile(file, 'utf8',function(err,data){
if(err){
//에러 처리
}
})
})
파일 상태
파일 상태 얻기
fs.stat(path, callback)
fs.statSync(path)
stats.isFile()
,stats.isDirectory()
: 파일, 디렉토리 여부stats.size
: 파일 크기stats.birthtime
: 생성일stats.atime
: 접근 시간stats.mtime
: 수정일
파일 상태 확인 : 동기
try{
var stats = fs.statSync(file);
}catch(err){
console.err('Cannot Access File', err);
}
파일 상태 확인 : 비동기
fs.stat(file, function(err,stats){
if(err){
console.err('Cannot Access File', err);
}
})
파일에 저장
fs.write(fd, data, callback)
fs.writeFile(filename,data,callback)
fs.writeFileSync(filename,data)
fd,filename
: 파일 디스크립터, 파일 경로fd,data
: 문자열 혹은 BufferEncoding
: 문자열 저장 시 인코딩- 같은 파일 이름 -> 덮어쓰기
파일에 내용 추가
fs.appendFile(file,data,callback)
fs.appendFileSync(file,data)
파일 삭제
fs.unlink(path, callback)
fs.unlinkSync(path)
파일 이름 변경/이동
fs.rename(oldPath,newPath,callback)
fs.renameSync(oldPath,newPath,callback)
디렉토리 생성
fs.mkdir(path,callback)
fs.mkdirSync(path,callback)
- 같은 이름의 디렉토리가 있으면 실패
디렉토리 삭제
fs.rmdir(path,callback)
fs.rmdirSync(path)
- 디렉토리가 비어있지 않으면 실패
디렉토리 내 파일 목록
fs.readdir(path, callback)
fs.readdirSync(path)
- 디렉토리가 없으면 에러
파일 스트림 만들기
fs.createReadStream(path)
fs.createWriteStream(path)
버퍼
버퍼 얻기
파일에서 읽기
var fileBuffer = fs.readFileSync('image.jpg');
네트워크에서 얻기
socket.on('data',function(data){})
버퍼 만들기
new Buffer(size)
new Buffer(array)
new Buffer(str)
- 사이즈는 고정적
모듈 함수
Buffer.byteLength(String,encoding)
: 바이트 길이Buffer.compare(buf1,buf2)
: 비교Buffer.concat(list, totallength)
: 붙이기Buffer.isBuffer(obj)
: 버퍼 확인Buffer.isEncoding(encoding)
: 인코딩
객체 메소드
buffer.length
buf.fill(value)
buf.slice(start,end)
buf.copy()