본문 바로가기
Programming

Node.js fs.access fs.mkdir fs.open fs.rename 사용법

by 개발자 염상진 2022. 9. 3.

Node.js에서 기본 제공되는 FileSystem(fs) 모듈을 사용하면 폴더를 생성하고, 파일을 생성하는 등 디렉토리에 접근하는 로직을 간단하게 구현할 수 있습니다.

 

 

 

fs.access(path, options, callback)

 

access 함수는 디렉토리나 파일에 접근할 수 있는 함수입니다. 

첫번째 인자로는 접근할 디렉토리 path를 사용합니다.

두번째 인자로는 파일 접근권한에 대한 여부를 체크합니다.

F_OK 존재여부 체크
R_OK 읽기 권한 체크
W_OK 쓰기 권한 체크
X_OK 실행 권한 체크

 

Error 코드 ENOENT는 폴더가 존재하지 않는 경우 발생하는 에러입니다.

 

const fs = require("fs").promises;
const constants = require("fs").constants;


fs.access(
  "./testFolder",
  constants.F_OK | constants.W_OK | constants.R_OK | constants.X_OK
)
  .then(() => {
    return Promise.reject("폴더가 이미 존재합니다.");
  })
  .catch((err) => {
    if (err.code === "ENOENT") {
      console.log("폴더가 존재하지 않습니다.");
      return fs.mkdir("./testFolder");
    }
    return Promise.reject(err);
  })
  .then(() => {
    console.log("폴더가 성공적으로 생성되었습니다.");
    return fs.open("./testFolder/file.js", "w");
  })
  .then((fileData) => {
    console.log("새로운 파일을 생성했습니다.", fileData);
    fs.rename("./testFolder/file.js", "./testFolder/newFile.js");
  })
  .then(() => {
    console.log("파일명 변경이 완료되었습니다.");
  })
  .catch((err) => {
    console.log(err);
  });

 

fs.mkdir (path, callback)

 

접근하고자 하는 폴더가 존재하지 않는 경우 폴더를 생성해주면 됩니다. 이 때 사용되는 함수가 fs.mkdir입니다. 인자로는 생성할 디렉토리 path를 넣어주면 됩니다.

fs.mkdir("./testFolder");

 

fs.open(path, option, callback)

 

파일을 가져와 read, write 등의 액션을 취할 수 있는 함수입니다. 만약 가져오고자 하는 파일이 존재하지 않는 경우 뒤에 옵션값을 w로 줘서 새로 생성할 수 있습니다.

r 파일을 읽어오는 경우
w 파일을 쓰는 경우
a 기존 파일에 추가하는 경우
fs.open("./testFolder/file.js", "w");

 

파일을 읽어온 뒤 파일아이디를 가져와 read와 write를 할 수 있습니다. 

우선 파일을 'r' 모드로 읽어와 콜백함수를 실행합니다.

버퍼의 크기를 10Byte로 지정해주고 

fs.read() 함수에 차례대로 buffer, offset, length, position 인자를 전달해줍니다. 

콜백함수로 넘어오는 데이터 중 buffer에 파일에서 읽어오 데이터가 담깁니다.

파일 읽기가 종료되면 fs.close() 함수로 filehandle을 종료해줍니다. 

fs.open('./testFolder/newFile.txt', 'r', (err, fd)=>{
    let buf = Buffer.alloc(10);
    fs.read(fd, buf, 0, 10, null, (err, bytesRead, buffer)=>{
        console.log(bytesRead)
        console.log(buffer.toString('utf8'));
    });
    fs.close(fd, ()=>{
        console.log('파일 읽기 종료')
    })
})

 

 

파일 쓰기는 기본적으로 read와 동일합니다.

우선 'w' 모드로 fs.open()함수를 실행합니다.

입력할 데이터를 버퍼로 변경해준 다음,

fs.write() 함수에 read() 함수와 동일하게 buffer, offset, length, position 인자를 전달해 데이터를 쓰고 난 후 fs.close()로 filehanlde를 종료해줍니다. 

fs.open("./testFolder/newFile.txt", "w", (err, fd) => {
  let buf = Buffer.from("새로운 데이터 입니다. \n");
  fs.write(fd, buf, 0, buf.length, null, (err, bytesWrite, buffer) => {
    fs.close(fd, () => {
      console.log("파일 쓰기 종료");
    });
  });
});

 

마지막으로 append는 write와 거의 동일하게 구현할 수 있습니다. 

fs.open 모드를 'a'로 변경하면 read를 하던 write를 하던 에러가 나지 않습니다.

데이터를 쓰는 부분은 write와 완전히 동일합니다.

결과물을 보면 기존 파일을 그대로 둔 채 입력한 데이터만 추가됩니다.

fs.open("./testFolder/newFile.txt", "a", (err, fd) => {
    let buf = Buffer.from("append 데이터 입니다. \n");
    fs.write(fd, buf, 0, buf.length, null, (err, bytesWrite, buffer) => {
      fs.close(fd, () => {
        console.log("파일 쓰기 종료");
      });
    });
  });

 

fs.rename(oldPath, newPath)

 

디렉토리나 파일의 경로를 새로 지정합니다. 첫번째 인자로는 기존의 디렉토리 path를 입력하고 두번째 인자로는 변경할 디렉토리 path를 지정해줍니다. 

 

 

리눅스에서 mv 명령과 동일한 결과를 가져옵니다.

fs.rename('./testFolder/newFile.js', './testFolder/newFile2.js')

 

 

 

 

Node.js readFile vs readFileSync promise file system module 사용법

Node.js 환경에서 파일을 읽고 쓰기 위한 모듈이 File System(fs) 모듈입니다. 파일을 읽고, 쓸수도 있고 폴더를 생성할 수도 있습니다. Node.js는 1개의 스택을 가진 프로그래밍 언어로 비동기 방식을 사

about-tech.tistory.com

 

 

Buffer Stream 이란? Node.js 버퍼 스트림 파이프 사용법

파일을 전송하는 방식에는 크게 2가지 방식이 있습니다. Buffer와 Stream으로 파일을 전송할 수 있습니다. 흔히 유튜브에서 영상을 볼 때 스피너가 계속 돌아가면 "버퍼링이 심하네"라고 합니다. 이

about-tech.tistory.com

 

 

[Blockchain] Infura 사용하는 이유 방법

Infura 사용이유? 일반 사용자가 블록체인과 통신을 하기 위해서는 중간에서 브릿지 역할을 해주는 모듈이 필요합니다. 이더리움 블록체인의 경우 클라이언트와 노드를 연결해주는 Web3.js를 통해

about-tech.tistory.com

 

댓글