Node.js에서 "fs"모듈을 사용하는 방법 알아보기
파일 시스템 모듈 또는 간단히 fs를 사용하면 시스템의 파일 시스템에 액세스하고 상호 작용할 수 있습니다.
fs 모듈을 사용하여 다음과 같은 작업을 수행 할 수 있습니다.
이 기사에서는 가장 일반적이고 유용한 fs 방법을 설명합니다. 그래서 더 이상 고민하지 않고 그 방법이 무엇인지 봅시다.
fs 사용 방법
파일 시스템 모듈은 핵심 Node.js 모듈입니다. 즉, 설치할 필요가 없습니다. 해야 할 일은 fs 모듈을 파일로 가져 오는 것뿐입니다.
따라서 파일 맨 위에 다음 행을 추가하십시오.
const fs = require('fs');
이제 접두사 fs를 사용하여 파일 시스템 모듈에서 모든 메서드를 호출 할 수 있습니다.
또는 다음과 같이 fs API에서 원하는 메서드만 가져올 수 있습니다.
const { writeFile, readFile } = require('fs');
그러나 이 자습서에서는 사용 된 첫 번째 옵션 인 전체 fs 모듈 가져 오기를 볼 수 있습니다.
Caveat
이 자습서에서는 경로 모듈도 가져와야 합니다. 또 다른 핵심 Node.js 모듈이며 파일 및 디렉토리 경로로 작업 할 수 있습니다.
fs 모듈을 가져온 후 파일에 다음 행을 추가하십시오.
const path = require('path');
경로 모듈은 파일 시스템 모듈로 작업하는 데 필수가 아닙니다. 그러나 도움이 됩니다!
동기화 대 비동기
기본적으로 모든 fs 메서드는 비동기 적이라는 점에 유의해야 합니다. 그러나 메서드 끝에 Sync를 추가하여 동기 버전을 사용할 수 있습니다.
예를 들어 writeFile과 같은 메서드는 writeFileSync가됩니다. 동기 메서드는 코드를 동 기적으로 완료하므로 주 스레드를 차단합니다. Node.js에서 메인 스레드를 차단하는 것은 나쁜 습관으로 간주됩니다.
결과적으로 이 자습서에서는 파일 시스템 모듈의 비동기 메서드를 사용합니다.
파일에 쓰기
가장 먼저 배우는 것은 파일에 쓰는 방법입니다. Node.js 애플리케이션에서 파일에 쓰려면 writeFile 메소드를 사용합니다.
writeFile 메소드는 최소한 다음 인수를 사용합니다.
지정된 파일이 이미 존재하는 경우 이전 콘텐츠를 인수로 제공 한 콘텐츠로 바꿉니다. 지정된 파일이 없으면 새 파일을 생성합니다.
fs 및 경로 모듈을 가져온 후 애플리케이션에 다음 코드를 작성하십시오.
fs.writeFile('content.txt', 'This is my first file!', (err) => {
if (err) {
throw err;
};
process.stdout.write('File created successfully!');
});
위의 코드는 content.txt라는 새 파일을 만들고 This is my first file!이라는 텍스트를 추가합니다. 내용으로. 콜백 함수는 오류가 있는 경우 오류를 발생시킵니다. 그렇지 않으면 파일 생성이 성공했음을 콘솔에 출력합니다.
파일 이름을 fsPractice.js라고 가정하고 터미널로 이동하여 명령 노드 fsPractice.js를 실행합니다. 명령을 실행 한 후 지정된 내용이 포함 된 새 파일이 표시되어야 합니다.
다음과 같은 "writeFile"의 다른 변형이 있습니다.
이 요점을 확인하여 애플리케이션이 이 시점까지 어떻게 보이는지 확인하십시오.
파일에서 읽기
파일에서 읽기 전에 파일 경로를 만들고 저장해야 합니다. 여기 경로 모듈이 유용한 곳입니다.
경로 모듈의 결합 방법을 사용하여 다음과 같이 파일 경로를 만들 수 있습니다.
const filePath = path.join(process.cwd(), 'content.txt');
첫 번째 인수 인 process.cwd()는 현재 작업 디렉토리를 반환합니다. 이제 파일 경로가 있으므로 파일의 내용을 읽을 수 있습니다.
파일에 다음 코드를 작성하십시오.
fs.readFile(filePath, (error, content) => {
if (error) throw error;
process.stdout.write(content);
});
readFile 메소드는 최소한 두 개의 인수를 사용합니다.
오류가 있으면 오류가 발생합니다. 그렇지 않으면 터미널에 파일 내용을 출력합니다.
터미널로 이동하여 명령 노드 fsPractice.js를 실행하면 터미널에 파일 내용이 표시됩니다.
다음과 같은 "readFile"의 다른 변형이 있습니다.
디렉토리 내용 읽기
디렉토리 안에 파일을 표시하는 것은 파일 내용을 읽는 것과 매우 유사합니다. 그러나 파일 경로를 전달하는 대신 현재 작업 디렉토리를 전달합니다 (다른 디렉토리를 전달할 수 있음).
그 후 응답을 처리하기 위해 콜백 함수를 전달합니다. 파일에 다음 코드를 작성하십시오.
fs.readdir(process.cwd(), (error, files) => {
if (error) throw error;
console.log(files);
});
지금까지는 process.stdout.write를 사용하여 내용을 터미널에 출력했습니다. 그러나 위의 코드 조각과 같이 console.log를 간단히 사용할 수 있습니다.
응용 프로그램을 실행하면 디렉토리에 있는 모든 파일이 있는 배열을 가져와야 합니다.
이 요점을 확인하여 애플리케이션이 이 시점까지 어떻게 보이는지 확인하십시오.
파일 삭제
파일 삭제 파일 시스템 모듈에는 파일을 삭제할 수있는 방법이 있습니다. 그러나 디렉토리가 아닌 파일에 대해서만 작동한다는 점에 유의하는 것이 중요합니다.
파일 경로를 인수로 사용하여 unlink 메서드를 호출하면 파일이 삭제됩니다. 파일에 다음 코드 조각을 추가합니다.
fs.unlink(filePath, (error) => {
if (error) throw error;
console.log('File deleted!')
});
코드를 다시 실행하면 파일을 삭제해야 합니다!
이 요점을 확인하여 애플리케이션이 이 시점까지 어떻게 보이는지 확인하십시오.
디렉토리 생성
mkdir 메소드를 사용하여 비동기 적으로 디렉토리를 작성할 수 있습니다. 파일에 다음 코드를 작성하십시오.
fs.mkdir(`${process.cwd()}/myFolder/secondFolder`, { recursive: true }, (err) => {
if (err) throw err;
console.log('Folder created successfully!');
});
단계별로 살펴 보겠습니다. 먼저 현재 작업 디렉터리 내에 새 폴더를 만들고 싶습니다. 앞서 언급했듯이 프로세스 객체에서 cwd () 메서드를 사용하여 현재 작업 디렉토리를 가져올 수 있습니다.
그런 다음 만들려는 폴더를 전달합니다. 그러나 현재 작업 디렉토리에 새 폴더를 만들어야 한다는 의미는 아닙니다. 어디서나 만들 수 있습니다.
이제 두 번째 매개 변수는 재귀 옵션입니다. true로 설정하지 않으면 여러 폴더를 만들 수 없습니다. 위의 코드는 재귀 옵션을 false로 설정하면 오류가 발생합니다. 보세요!
그러나 폴더를 하나만 만들려는 경우 재귀 옵션을 true로 설정할 필요가 없습니다.
다음 코드는 잘 작동합니다!
fs.mkdir(`${process.cwd()}/myFolder`, (err) => {
if (err) throw err;
console.log('Folder created successfully!');
});
따라서 재귀 사용을 강조하고 싶습니다. 폴더 안에 폴더를 만들려면 true로 설정해야 합니다. 존재하지 않더라도 모든 폴더를 생성합니다.
반면에 폴더를 하나만 만들려면 false로 둘 수 있습니다.
이 요점을 확인하여 애플리케이션이 이 시점까지 어떻게 보이는지 확인하십시오.
디렉토리 삭제
디렉토리를 삭제하는 논리는 디렉토리를 만드는 것과 유사합니다. 디렉토리를 만들기 위해 작성한 코드와 아래 코드를 보면 유사점을 볼 수 있습니다.
따라서 파일에 다음 코드를 작성하십시오.
fs.rmdir(`${process.cwd()}/myFolder/`, { recursive: true }, (err) => {
if (err) throw err;
console.log('Folder/s deleted successfully!');
});
파일 시스템 모듈에서 rmdir 메소드를 사용하고 다음 인수를 전달합니다.
재귀 속성을 true로 설정하면 폴더와 그 내용이 삭제됩니다. 폴더에 콘텐츠가 있는 경우 true로 설정해야 합니다. 그렇지 않으면 오류가 발생합니다.
아래 코드 조각은 폴더가 비어있는 경우에만 작동합니다.
fs.rmdir(`${process.cwd()}/myFolder/`, (err) => {
if (err) throw err;
console.log('Folder/s deleted successfully!');
});
myFolder 내에 다른 파일 및 / 또는 폴더가 있는 경우 {recursive : true}를 전달하지 않으면 오류가 발생합니다.
재귀 옵션을 사용할 때와 문제를 피하지 않아야 할 때를 아는 것이 중요합니다.
이 요점을 확인하여 애플리케이션이 이 시점까지 어떻게 보이는지 확인하십시오.
이름 바꾸기
fs 모듈을 사용하면 디렉토리와 파일 모두의 이름을 바꿀 수 있습니다. 아래 코드 스니펫은 rename 메소드를 사용하여 수행하는 방법을 보여줍니다.
// renaming a directory
fs.rename(`${process.cwd()}/myFolder/secondFolder`, `${process.cwd()}/myFolder/newFolder`, (err) => {
if (err) throw err;
console.log('Directory renamed!')
});
// renaming a file
fs.rename(`${process.cwd()}/content.txt`, `${process.cwd()}/newFile.txt`, (err) => {
if (err) throw err;
console.log('File renamed!')
});
rename 메소드가 세 가지 인수를 취하는 것을 볼 수 있습니다.
따라서 파일 또는 디렉토리의 이름을 변경하려면 현재 파일 / 디렉토리의 이름과 새 이름을 전달해야 합니다. 응용 프로그램을 실행 한 후 디렉터리 / 파일의 이름을 업데이트 해야 합니다.
새 경로가 이미 존재하는 경우 (예 : 파일 / 폴더의 새 이름) 덮어 쓰게 됩니다. 따라서 실수로 기존 파일 / 폴더를 덮어 쓰지 않도록 주의하십시오.
이 요점을 확인하여 애플리케이션이 이 시점까지 어떻게 보이는지 확인하십시오.
파일에 콘텐츠 추가
파일 시스템 모듈을 사용하여 기존 파일에 새 컨텐츠를 추가 할 수도 있습니다. appendFile 메소드를 사용하면 그렇게 할 수 있습니다.
writeFile과 appendFile의 두 메소드를 비교해 보면 서로 비슷하다는 것을 알 수 있습니다. 파일 경로, 콘텐츠 및 콜백을 전달합니다.
fs.appendFile(filePath, '\nNew data to be added!', (err) => {
if (err) throw err;
console.log('New content added!');
});
위의 코드 스니펫은 기존 파일에 새 콘텐츠를 추가하는 방법을 보여줍니다. 응용 프로그램을 실행하고 파일을 열면 내부에 새 콘텐츠가 표시됩니다.
이 요점을 확인하여 애플리케이션이 이 시점까지 어떻게 보이는지 확인하십시오.
결론
이 글을 읽고 있다면 다음을 할 수 있습니다.
그러나 파일 시스템 모듈은 더 복잡하므로 공식 문서를 확인하는 것이 좋습니다. 공식 문서에서 모든 방법을 볼 수 있습니다.
https://catalins.tech/a-beginners-guide-to-the-file-system-module-in-nodejs
등록된 댓글이 없습니다.