바르고 뜨겁게
Javascript - fs(파일 시스템) 프로미스 동기 처리 본문
fs 모듈 : 로컬의 파일 및 폴더를 읽기/쓰기/삭제 가능
사용법
비동기 방식
const fs = require('fs');
fs.readFile('./readme.txt', (err, data) => {
if (err) { throw err; }
console.log(data.toString());
});동기 방식
const fs = require('fs');
const data = fs.readFileSync('./readme.txt')
console.log(data.toString());프로미스 방식
const fs = require('fs').promises;
fs.readFile('./readme.txt')
.then((data) =>
console.log(data.toString());
})
.catch((err) => {
console.error(err);
});
메서드
fs.access(경로, 옵션, 콜백)
: 접근 가능 여부 체크fs.mkdir(경로, 콜백)
: 폴더 생성fs.open(경로, 옵션, 콜백)
: 파일의 아이디(fd 변수)를 가져옴. 파일이 없으면 파일을 생성 하므로 파일 생성에 사용가능fs.write()
: w 쓰기 , r 읽기 , a 추가 가능.fs.rename(기존경로, 새경로, 콜백)
: 파일 이름 변경 및 이동fs.readdir(경로, 콜백)
: 폴더 내용 확인fs.unlink
: 파일 삭제fs.rmdir
: 폴더 삭제
예제
Promise를 사용하여 비동기 방식의 fs 메서드를 동기처리함.
폴더 여부 체크 후 없으면 폴더 생성
파일 여부 체크 후 없으면 파일 생성
파일에 쓰기 및 읽기 실행
'use strict';
const fs = require('fs'); // fs 프로미스가 있지만 직접 만들어 봄.
const isAccessCheck = async (getPath) => {
return new Promise((resolve, reject) => {
fs.access(getPath, fs.constants.F_OK | fs.constants.R_OK | fs.constants.W_OK, (err) => {
if (err) {
if (err.code === 'ENOENT') {
resolve(false)
} else {
reject(err)
}
} else {
resolve(true)
}
});
})
}
const makeDir = async (getPath) => {
return new Promise((resolve, reject) => {
fs.mkdir(getPath, (err) => {
if (err) {
reject(err)
} else {
console.log(getPath + ' make 성공');
resolve()
}
});
})
}
const makeFile = async (getPath) => {
return new Promise((resolve, reject) => {
fs.open(getPath, 'w', (err, fd) => {
if (err) {
reject(err)
} else {
console.log(getPath + ' make 성공');
resolve()
}
});
})
}
const writeFile = async (getPath, contents) => {
return new Promise((resolve, reject) => {
const writeStream = fs.createWriteStream(getPath);
// 이벤트 리스너
writeStream.on('finish', () => { resolve() })
writeStream.write(contents)
writeStream.end();
})
}
const readFile = async (getPath) => {
return new Promise((resolve, reject) => {
fs.readFile(getPath, (err, data) => {
if (err) {
reject(err)
} else {
resolve(data)
}
});
})
}
// ************************************************************************************* //
const dirPath = './src';
const fileName = 'readme.txt';
isAccessCheck(dirPath)
.then((isAccess) => {
console.log(dirPath + ' 존재 여부 : ' + isAccess);
if (isAccess) {
return
} else {
return makeDir(dirPath);
}
})
.then(() => {
return isAccessCheck(dirPath + '/' + fileName)
})
.then((isAccess) => {
console.log(dirPath + '/' + fileName + ' 존재 여부 : ' + isAccess);
if (isAccess) {
return
} else {
return makeFile(dirPath + '/' + fileName);
}
})
.then(() => {
return writeFile(dirPath + '/' + fileName, '가나다라마바사\n아 자차카 타파하하')
})
.then(() => {
return readFile(dirPath + '/' + fileName)
})
.then((data) => {
console.log(dirPath + '/' + fileName + " 파일 읽기 :\n" + data.toString())
})
.catch((errData) => console.error(errData))
console
./src 존재 여부 : false
./src make 성공
./src/readme.txt 존재 여부 : false
./src/readme.txt make 성공
./src/readme.txt 파일 읽기 :
가나다라마바사
아 자차카 타파하하
'자바스크립트 > Vanilla Js' 카테고리의 다른 글
Javascript - 프로미스(Promise) (0) | 2020.10.17 |
---|---|
Javascript - 객체 리터럴 (object literal) (0) | 2020.10.16 |
[JavaScript] 실행 컨텍스트와 호이스팅 (0) | 2020.06.14 |
JavaScript - setInterval 사용시 func.apply is not a function 에러 (0) | 2019.08.30 |
Vanilla JS - Array.includes (0) | 2019.05.22 |
Comments