본문 바로가기
프로그래밍/database

fs모듈 : 파일 다루기

by 한코코 2022. 7. 17.

사전 준비

fs : 파일 입출력을 할때 사용하는 NodeJs 내장모듈

path : 폴더와 파일의 경로를 임의로 지정해주는 라이브러리

const fs = require('fs')
const path = require('path')

 

 

 

 

현재 위치 알기

현재 실행하는 파일이 있는 위치를 절대경로로 알려준다

console.log(__dirname)
// >> /Users/hancoco/workspace/git/final/file_upload/back

 

 

 

 

디렉토리 생성

// 비동기로 디렉토리 생성하기
fs.mkdir("newDir", (err) => { console.log("mkdir : ", err)}); 

// 동기로 디렉토리 생성하기
fs.mkdirSync("newDirSync");

 

 

 

 

디렉토리 삭제

// 비동기 디렉토리 삭제하기
fs.rmdir("newDir", (err) => {console.log('del : ',err)});

// 동기적으로 디렉토리 삭제하기
fs.rmdirSync("newDirSync");

 

 

 

 

데이터를 덮어쓰기

const originFile = "readData.js";
const writeData = `비동기적 덮어쓰기`;
const writeDataSync = `동기적 덮어쓰기`;

// 비동기적 데이터 덮어쓰기
fs.writeFile(originFile, writeData, (err) => {console.log('write : ',err)});

// 동기적 데이터 덮어쓰기
fs.writeFileSync(originFile, writeDataSync);

 

 

 

 

데이터를 추가하기

const originAddFile = "readData.js";
const writeAddData = `비동기적 추가`;
const writeAddDataSync = `비동기적 추가`;

// 비동기적 데이터 추가해 쓰기
fs.appendFile(originFile, writeData, (err) => {console.log('append : ',err)});

// 동기적으로 데이터 추가해서 쓰기
fs.appendFileSync(originFile, writeDataSync);

 

 

 

 

파일 읽기

// 마지막 인자로 콜백함수를 받고 아무값도 반환하지 않는다.
// 비동기적 파일 읽기
fs.readFile("readData.js", "utf8", (err) => {console.log('read : ',err)});

//동기적 파일 읽기
fs.readFileSync("readData.js", "utf8");

 

 

 

 

옵션을 추가해서 인코딩방식 바꾸기

이런식으로 중간에 옵션을 추가해서 인코딩 방식을 바꿀 수 있다는데 왠지 잘 안쓸듯.

 

fs.appendFile(originFile, writeData, "utf8", (err) => {
  console.log("append : ", err);
});

fs.appendFileSync(originFile, writeDataSync, "utf8");

 

 

 

 

주의할점

동기적 코드와 비동기적 코드가 어떻게 실행되는지 알아야 나중에 실행결과를 예상할 수 있다.

https://hancoco.tistory.com/49

 

[220112] 동기적코드 / 비동기적 코드 / setTimeout(), setInterval()

동기적인 방법와 비동기인 방법은 뭘까? 동기적인 코드 자바스크립트 코드는 보통 동기적으로 실행된다. 마치 책을 읽듯이 위에서 아래로, 왼쪽에서 오른쪽으로 읽어내려오며 코드를 한줄한줄

hancoco.tistory.com

 

 

 

 

파일/디렉토리의 메타정보 추출하기

// 파일/디렉토리 비동기적으로 메타정보 확인
fs.stat("readData.js", (err, stats) => {
  try {
    console.log({
      size: stats.size, //파일크기
      mtine: stats.mtime, //파일수정시간
      isFile: stats.isFile(), //파일인지 디렉토리인지
    });
  } catch (err) {}
});

// 파일/디렉토리 동기적으로 메타정보 확인
const stats = fs.statSync("readData.js")
console.log({
    size: stats.size,
    mtine: stats.mtime,
    isFile: stats.isFile(),
})

 

출력결과

{ size: 44, mtine: 2022-07-17T09:46:03.989Z, isFile: true }

댓글