본문 바로가기

기타/node js

node js fs.writeFile, fs.writeFileSync, fs.appendFile 사용방법

728x90

오늘은 node js에서 파일을 생성하고 내용을 추가하는 fs.writeFile, fs.appendFile에 대해 알아보도록 하겠습니다.

 

fs.writeFile('파일 이름', '입력할 데이터', (err) => {
    데이터를 넣은 후 처리해야 할 프로세스 혹은 에러가 났을 때 처리할 피로세스.
  });

writeFile은 파일을 다른 데이터로 덮어 씌우거나 새로운 파일을 생성하는 기능을 수행하기 때문에 내용을 추가할 때는 사용할 수 없습니다. 

파일 이름에 기존에 존재하는 파일이름이 있을 때, 덮어 씌움

없을 때, 새로운 파일을 생성한다.

 

없는 파일을 새롭게 생성할 때, 아래와 같은 코드를 실행하면 어떤 결과가 나올까요?

fs.writeFile('message.txt', 'Hello Node.js', (err) => {
    if (err) throw err;
    console.log('The file has been saved!');
  });
let data2 = fs.readFileSync('message.txt','utf-8');

 

에러가 나옵니다.

그 이유는 뭘까요?

fs.writeFile 함수는 비동기적 처리를 하기 때문입니다.

그러니까 message.txt가 생성되기 이전에 아래 부분이 실행되기 때문에

let data2 = fs.readFileSync('message.txt','utf-8');

다음과 같은 에러가 발생합니다.

Error: ENOENT: no such file or directory, open 'message.txt'

이런 문제를 해결하기 위해서는 writeFile을 비동기적 처리를 해주는 writeFileSync로 바꿔 주거나

let data2... 코드 부분을 writeFile 콜백 함수 안쪽에 넣어주면 됩니다.

nodejs는 비동기 처리를 통해 효율을 높이기 때문에 sync를 사용하는 것보다는 콜백 함수 안에 넣어서 처리하는 것이 좋습니다.

fs.readFileSync('message.txt', 'Hello Node.js')
let data3 = fs.readFileSync('message.txt','utf-8');

fs.writeFile('message.txt', 'Hello Node.js', (err) => {
    if (err) throw err;
    console.log('The file has been saved!');
    let data2 = fs.readFileSync('message.txt','utf-8');
});

 

이제 파일에 데이터를 추가하는 fs.appendFile에 대해 알아보도록 하겠습니다

appendFile은 데이터를 생성할 수도 있고 추가할 수도 있습니다.

message.txt 파일이 없는 상태에서 아래 코드를 실행하면 파일이 생성됩니다.

fs.appendFile('message.txt', 'data to append2', (err) => {
    if (err) throw err;
    console.log('The "data to append" was appended to file!');
  });

위의 코드를 두 번 실행하면

'data to append2data to append2'와 같은 텍스트 파일이 생성됩니다.

appendFileSync가 존재합니다.

사용방법은 위에서 알려드린 것과 일칠 합니다.

최대한 사용하지 않고 appendFile을 사용하는 것을 권장드립니다.

 

긴 글 읽어주셔서 감사합니다

728x90