프로그래밍 언어/NODE JS

기타 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