기타 fs 메서드 알아보기
fsCreate.js
const fs = require("fs").promises;
const constants = require("fs").constants;
fs.access("./folder", constants.F_OK | constants.W_OK | constants.R_OK)
.then(() => {
return Promise.reject("이미 폴더 있음");
})
.catch((err) => {
if (err.code === "ENOENT") {
console.log("폴더 없음");
return fs.mkdir("./folder");
}
return Promise.reject(err);
})
.then(() => {
console.log("폴더 만들기 성공");
return fs.open("./folder/file.js", "w");
})
.then((fd) => {
console.log("빈 파일 만들기 성공", fd);
return fs.rename("./folder/file.js", "./folder/newFile.js");
})
.then(() => {
console.log("이름 바꾸기 성공");
})
.catch((err) => {
console.error(err);
});
콘솔
$ node fsCreate
폴더 없음
폴더 만들기 성공
빈 파일 만들기 성공 FileHandle {
_events: [Object: null prototype] {},
_eventsCount: 0,
_maxListeners: undefined,
close: [Function: close],
[Symbol(shapeMode)]: false,
[Symbol(kCapture)]: false,
[Symbol(kHandle)]: FileHandle {},
[Symbol(kFd)]: 3,
[Symbol(kRefs)]: 1,
[Symbol(kClosePromise)]: null
}
이름 바꾸기 성공
$ node fsCreate
이미 폴더 있음
fs.access(경로, 옵션, 콜백) : 폴더나 파일에 접근할 수 있는지를 체크합니다. 두 번째 인수로 상수들(constants를 통해 가져옵니다)을 넣었습니다. F_OK는 파일 존재 여부, R_OK는 읽기 권한 여부, W_OK는 쓰기 권한 여부를 체크합니다. 파일/폴더나 권한이 없다면 에러가 발생하는데 파일/폴더가 없을 때의 에러 코드는 ENOENT입니다.
fs.mkdir(경로, 콜백) : 폴더를 만드는 메서드입니다. 이미 폴더가 있다면 에러가 발생하므로 먼저 access 메서드를 호출해서 확인하는 것이 중요합니다.fs.open(경로, 옵션, 콜백) : 파일의 아이디(fd 변수)를 가져오는 메서드입니다. 파일이 없다면 파일을 생성한 뒤 그 아이디를 가져옵니다. 가져온 아이디를 사용해 fs.read나 fs.write로 읽거나 쓸 수 있습니다. 두 번째 인수로 어떤 동작을 할 것인지를 설정할 수 있습니다. 쓰러면 w, 읽으려면 r, 기존 파일에 추가하려면 a입니다.fs.rename(기존 경로, 새 경로, 콜백) : 파일의 이름을 바꾸는 메서드입니다. 기존 파일 위치와 새로운 파일 위치를 적으면 됩니다. 꼭 같은 파일 위치와 새로운 파일 위치를 적으면 됩니다. 꼭 같은 폴더를 지정할 필요는 없으므로 잘라내기 같은 기능을 할 수도 있습니다.
fsDelete.js
const fs = require("fs").promises;
fs.readdir("./folder")
.then((dir) => {
console.log("폴더 내용 확인", dir);
return fs.unlink("./folder/newFile.js");
})
.then(() => {
console.log("파일 삭제 성공");
return fs.rmdir("./folder");
})
.then(() => {
console.log("폴더 삭제 성공");
})
.catch((err) => {
console.error(err);
});
콘솔
$ node fsDelete
폴더 내용 확인 [ 'newFile.js' ]
파일 삭제 성공
폴더 삭제 성공
fs.readdir(경로, 콜백) : 폴더 안의 내용물을 확인할 수 있습니다. 배열 안에 내부 파일과 폴더명이 나옵니다.
fs.unlink(경로, 콜백) : 파일을 지울 수 있습니다. 파일이 없다면 에러가 발생하므로 먼저 파일이 있는지로 확인해야 합니다.
fs.rmdir(경로, 콜백) : 폴더를 지울 수 있습니다. 폴더 안에 파일들이 있다면 에러가 발생하므로 먼저 내부 파일을 모두 지우고 호출해야 합니다.
node fsDelete를 한 번 더 실행하면 ENOENT 에러가 발생합니다. 존재하지 않는 파일을 지웠다는 에러입니다.
copyFile.js
const fs = require("fs").promises;
fs.copyFile("readme4.txt", "writeme4.txt")
.then(() => {
console.log("복사 완료");
})
.catch((error) => {
console.error(error);
});
콘솔
$ node copyFile
복사 완료
readme.txt와 동일한 내용의 writeme4.txt가 생성되었을 것입니다. 첫 번째 인수로 복사할 파일을, 두 번째 인수로 복사될 경로를, 세 번째 인수로 복사 후 실행될 콜백 함수를 넣습니다.
마지막으로 파일/폴더의 변경 사항을 감시할 수 있는 watch 메소드를 알아보겠습니다. 빈 텍스트 파일인 target.txt를 만들고 watch.js를 작성합니다.
watch.js
const fs = require("fs");
fs.watch("./target.txt", (evenType, filename) => {
console.log(evenType, filename);
});
콘솔
$ node watch
// 내용을 수정 후
change target.txt
change target.txt
// 파일명 변경 또는 파일 삭제 후
rename target.txt
내용물을 수정할 때는 change 이벤트가 발생하고, 파일명을 변경하거나 파일을 삭제하면 rename 이벤트가 발생합니다. rename 이벤트가 발생한 후에는 더 이상 watch가 수행되지 않습니다. change 이벤트가 두 번씩 발생하시도 하므르 실무에서 수행할 때는 주의가 필요합니다.
'프로그래밍 언어 > NODE JS' 카테고리의 다른 글
| 이벤트 이해하기 (0) | 2025.05.07 |
|---|---|
| 스레드 풀 알아보기 (0) | 2025.05.04 |
| 버퍼와 스트림 이해하기 (0) | 2025.04.28 |
| 동기 메서드와 비동기 메서드 (0) | 2025.04.26 |
| 파일 시스템 접근하기 (0) | 2025.04.22 |