본문 바로가기
Do it Node.js/EJS BackEnd

5. fs 모듈

by 갱생angel 2024. 2. 27.

fs 모듈 : 파일이나 디렉터리(폴더)에 접근해서 파일/디렉터리 관련 작업을 수행하는 모듈

 

ch03 - <list.js> : ch03 디렉터리(폴더)에 있는 파일을 표시

readdir(경로[, 옵션], 콜백) : 지정한 경로의 디렉터리를 읽고, 디렉터리 내부에 파일 이름을 모두 표시

※옵션

  -encoding : 반환값 형태 지정, 기본값은 'uft8(텍스트 형식)'

  -withFileTypes : 디렉터리 항목으로 표시 유무 지정, 기본값은 false

const fs = require("fs"); //fs 모듈을 가져옴

fs.readdir("./", (err, files) => { //경로, 콜백 지정
  if (err) { 
    console.error(err); //에러를 표시
  } else {
    console.log(files); //디렉터리에 파일을 읽어옴
  }
});
>> node list

 

디렉터리 항목 : 파일 이름과 파일 유형이 쌍을 이루어진 것


<파일 관리하기>

 

ch03 - <read.js> : ch03 디렉터리에 example.txt 파일을 읽어옴

readFile(파일[, 옵션], 콜백) : 파일의 내용을 읽어 버퍼, 문자열로 반환

※옵션

  -encoding : 반환값 형태 지정, 기본값은 null(바이너리 형태)이며 보통 'uft8(텍스트 형식)'으로 지정

  -flag : 파일을 어떤 형태로 읽을 지 지정, 기본값은 r(읽기)이며 w(쓰기) / a(추가) / r+(읽기&쓰기) 등 여러 값 사용

  -signal : 중간에 파일 읽기 취소 지정

const fs = require("fs");

fs.readFile("./example.txt", "utf8", (err, data) => { //파일 경로, 반환값 형태, 콜백
  if (err) {
    console.error(err);
  } else {
    console.log(data); //example.txt 파일을 읽어옴
  }
});
>> node read

 

ch03 - <write.js> : example.txt에 내용을 text.txt에 작성

existSync(파일) : 파일 존재 여부를 확인

writeFile(파일, 내용[, 옵션], 콜백) : 파일에 내용을 기록

  -파일이 없을 경우 파일 새로 생성, 파일이 있을 경우 기존 파일에 내용을 전부 지우고 새로 작성

※옵션

  -mode : 파일에 사용자의 권한을 설정, 기본값은 0o666(읽고, 쓰기 권한)

  -encoding('uft8'), flag('w'), signal

const fs = require("fs");

fs.readFile("./example.txt", "utf8", (err, data) => { //example.txt 파일을 읽어옴
  if (err) {
    console.error(err);
  } else if (fs.existsSync("./text.txt")) { //text.txt 파일이 있는 지 확인
    console.log("text.txt is already");
  } else {
    fs.writeFile("./text.txt", data, (err) => { //example.txt 파일 내용을 text.txt에 작성
      if (err) {
        console.error(err);
      } else {
        console.log("text.txt is write");
      }
    });
  }
});
>> node write

 

ch03 - <append.js> : text.txt 파일에 새로운 내용 추가

appendFile(파일, 내용[, 옵션], 콜백) : 기존 파일에 내용을 새로 추가

※옵션 : encoding('uft8'), flag('w'), mode

const fs = require("fs");

const appendText = `

새로운 내용 추가
`;

fs.appendFile("./text.txt", appendText, (err) => { //파일 이름, 추가할 내용, 콜백 지정
  if (err) {
    console.error(err);
  } else {
    console.log("text.txt is append");
  }
});
>> node append

 

ch03 - <unlink.js> : text.txt 파일을 삭제

unlink(파일, 콜백) : 파일을 삭제

const fs = require("fs");

if (!fs.existsSync) { //파일이 없을 경우
  console.log("text.txt is already done");
} else { //파일이 있을 경우
  fs.unlink("text.txt", () => { //파일을 삭제
    console.log("text.txt is unlink");
  });
}
>> node unlink


<디렉터리 관리>

 

ch03 - <dirMake.js> : test, test2, test3 디렉터리를 한꺼번에 생성

mkdir(경로[, 옵션], 콜백) : 디렉터리를 생성

※옵션

  -recursive : 여러 개의 디렉터리를 지정했을 시 중간에 존재하지 않는 경로까지 포함, 기본값은 false

  -mode : 디렉터리의 권한을 지정, 기본값을 지정 0o777(읽기, 쓰기, 실행)

const fs = require("fs");

if (fs.existsSync("./test/test2/test3")) { //디렉터리가 있을 경우
  console.log("Directory is already");
} else { //디렉터리가 없을 경우
  fs.mkdir("./test/test2/test3", { recursive: true }, (err) => { //디렉터리 생성
    if (err) {
      console.error(err);
    } else {
      console.log("Directory is make");
    }
  });
}
>> node dirMake

 

ch03 - <dirRemove.js> :  test, test2, test3 디렉터리를 한꺼번에 삭제

rm(경로[, 옵션], 콜백) : 디렉터리 삭제

※옵션

  -force : 파일/디렉터리를 강제로 삭제할 지 지정, 기본값은 false

  -maxRetries : 오류오 디렉터리를 삭제하지 못했을 시 재시도 횟수 지정, 기본값은 0

  -retryDelay : 재시도 횟수를 지정할 경우 대기 시간(밀리초)을 지정, 기본값은 100

  -recursive : 여러 개의 디렉터리를 지정했을 시 중간에 존재하지 않는 경로까지 포함, 기본값은 false

const fs = require("fs");

if (fs.existsSync("./test")) { //디렉터리가 있을 경우
  fs.rm("./test", { recursive: true }, (err) => { //디렉터리 삭제
    if (err) {
      console.error(err);
    } else {
      console.log("Directory is remove");
    }
  });
} else { //디렉터리가 없을 경우
  console.log("Directory is already remove");
}
>> node dirRemove

 

rmdir(경로[, 옵션], 콜백) : 빈 디렉터리만 삭제

※옵션

  -maxRetries : 오류오 디렉터리를 삭제하지 못했을 시 재시도 횟수 지정, 기본값은 0

  -retryDelay : 재시도 횟수를 지정할 경우 대기 시간(밀리초)을 지정, 기본값은 100

'Do it Node.js > EJS BackEnd' 카테고리의 다른 글

7. HTTP 모듈  (0) 2024.02.29
6. 버퍼, 스트림, 파이프  (0) 2024.02.28
4. path 모듈  (0) 2024.02.25
3. 모듈 시스템  (0) 2024.02.24
2. 자바스크립트 비동기 처리  (0) 2024.02.23