노드에서 fs 모듈은 파일을 동작시키는데 사용되는 모듈인 "파일 시스템 모듈"을 가리킨다. fs 모듈의 대부분 API는 세 가지 작동 방법을 제공합니다. 1. 동기 파일 작업: 코드가 차단되고 계속 실행되지 않습니다. 2. 비동기 콜백 함수 작업 파일: 코드가 차단되지 않으며 콜백 함수가 필요합니다. 결과가 생성되면 콜백 함수가 실행됩니다. 3. 비동기 Promise 작업 파일: 코드가 차단되지 않으며 fs.promises를 통해 메서드 작업을 호출하여 Promise가 반환됩니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, nodejs 버전 16, DELL G3 컴퓨터.
파일 시스템 모듈(줄여서 fs)을 사용하면 컴퓨터의 파일 시스템에 액세스하고 상호 작용할 수 있습니다.
fs 모듈은 파일 운영을 위해 Node.js에서 공식적으로 제공하는 모듈입니다. 사용자의 파일 작업 요구 사항을 충족하는 일련의 방법과 속성을 제공합니다.
지정된 파일의 내용을 읽는 데 사용되는 fs.readFile() 메서드
JavaScript 코드에서 사용하려는 경우 지정된 파일에 콘텐츠를 쓰는 데 사용되는 fs.writeFile() 메서드
파일 시스템 모듈은 핵심 Node.js 모듈입니다. 즉, 설치할 필요가 없습니다. 우리가 해야 할 유일한 일은 fs 모듈을 자체 파일로 가져오는 것입니다.
따라서 파일 상단에 다음을 추가하십시오.
const fs = 요구('fs')이제 접두사 fs를 사용하여 파일 시스템 모듈에서 모든 메서드를 호출할 수 있습니다.
또는 다음과 같이 fs API에서 필요한 메서드를 가져올 수도 있습니다.
const { writeFile, readFile } = require('fs')참고: 편의를 위해 경로 모듈도 가져와야 합니다. 이는 파일 및 디렉터리 경로 작업을 가능하게 하는 또 다른 핵심 Node.js 모듈입니다.
fs 모듈을 가져온 후 다음을 추가합니다.
const 경로 = require('경로')파일 시스템 모듈을 사용하는 경우 경로 모듈이 필요하지 않습니다. 하지만 그것은 우리에게 많은 도움이 됩니다!
fs 모듈의 파일 작업은 일반적으로 동기식과 비동기식의 두 가지 API를 지원합니다. 또한 비동기식에는 콜백 함수와 promsie 양식도 포함됩니다. 동기화 뒤에는 일반적으로 동기화라는 단어가 옵니다.
fs 모듈의 대부분 API는 세 가지 작업 방법을 제공합니다.
파일의 동기 작업: 코드가 차단되고 더 이상 실행되지 않습니다.
비동기 콜백 함수 작업 파일: 코드가 차단되지 않고 콜백 함수가 전달되어야 하며 결과를 얻으면 콜백 함수가 실행됩니다.
비동기 Promise 작업 파일: 코드는 차단되지 않습니다. fs.promises를 통해 메서드 작업을 호출하면 then 및 catch를 통해 처리될 수 있는 Promise가 반환됩니다.
모든 fs 메소드는 기본적으로 비동기적입니다. 그러나 메서드 끝에 Sync를 추가하면 동기화된 버전을 사용할 수 있습니다.
예를 들어 writeFile 메서드의 동기 버전은 writeFileSync입니다. 동기 메서드는 코드를 동기적으로 완료하므로 기본 스레드를 차단합니다. Node.js에서 메인 스레드를 차단하는 것은 나쁜 습관으로 간주되므로 그렇게 해서는 안 됩니다.
따라서 아래에서는 파일 시스템 모듈에서 비동기 메서드를 사용합니다.
Node.js 애플리케이션에서 파일에 쓰려면 writeFile 메서드를 사용하세요.
writeFile 메소드는 최소한 다음 매개변수를 허용합니다.
파일 이름 콘텐츠 콜백지정된 파일이 이미 존재하는 경우 이전 내용을 인수로 제공한 내용으로 바꿉니다. 지정한 파일이 없으면 새 파일이 생성됩니다.
fs 및 path 모듈을 가져온 후 파일에 다음 코드를 작성합니다.
fs.writeFile('content.txt', '일만 하고 놀지 않으면 잭은 지루한 소년이 됩니다!', err => { if (err) throw err process.stdout.write('성공적으로 생성되었습니다!')})위의 코드는 content.txt라는 새 파일을 생성하고 All work and no play make Jack a dumb boy!라는 텍스트를 추가합니다. 오류가 있으면 콜백 함수에서 해당 오류가 발생합니다. 그렇지 않으면 파일이 성공적으로 생성되었다는 메시지가 콘솔에 출력됩니다.
writeFile에는 다음과 같은 다른 변형이 있습니다.
fs.writeFileSync — 동기식으로 파일 쓰기 fsPromises.writeFile — Promise 기반 API를 사용하여 파일 쓰기이 요지를 확인하세요: https://gist.github.com/catalinpit/571ba06c06214b5c8744036c6500af92
파일을 읽기 전에 파일 경로를 생성하고 저장해야 합니다. 여기서는 path 모듈의 경로가 편리합니다.
조인 모듈의 경로 메소드를 사용하면 다음과 같이 파일 경로를 생성할 수 있습니다.
const filePath = path.join(process.cwd(), 'content.txt')첫 번째 매개변수 process.cwd()는 현재 작업 디렉터리를 반환합니다. 이제 파일 경로가 있으므로 파일 내용을 읽을 수 있습니다.
파일에 다음 코드를 작성합니다.
fs.readFile(filePath, (error, content) => { if (error) throw error process.stdout.write(content)})readFile 메소드는 최소한 두 개의 매개변수를 허용합니다:
파일 경로 콜백오류가 있으면 오류가 발생합니다. 그렇지 않으면 터미널에 파일 내용이 인쇄됩니다.
다음과 같은 readFile의 다른 변형이 있습니다.
fs.readFileSync — 동기식으로 파일에 쓰기 fsPromises.readFile — Promise 기반 API를 사용하여 파일에 쓰기이 요지를 확인하세요: https://gist.github.com/catalinpit/badc2a539a44412892a0e05a9575d54d
디렉토리에 파일을 표시하는 것은 파일 내용을 읽는 것과 매우 유사합니다. 그러나 파일 경로를 전달하는 대신 현재 작업 디렉터리를 전달합니다(다른 디렉터리를 전달할 수 있음).
그런 다음 콜백 함수를 전달하여 응답을 처리합니다. 파일에 다음 코드를 작성합니다.
fs.readdir(process.cwd(), (error, files) => { if (error) throw error console.log(files)})지금까지는 터미널에 콘텐츠를 출력하기 위해 process.stdout.write만 사용했습니다. 그러나 위의 코드 조각처럼 간단히 console.log를 사용할 수 있습니다.
애플리케이션을 실행하면 디렉터리의 모든 파일이 포함된 배열을 얻어야 합니다.
이 요지를 확인하세요: https://gist.github.com/catalinpit/f82c4e6ae3acd5d97efdecb0bc67979e
파일 시스템 모듈에는 파일을 삭제할 수 있는 방법이 있습니다. 그러나 디렉터리가 아닌 파일에 대해서만 작동한다는 점에 유의하는 것이 중요합니다.
파일 경로를 매개변수로 사용하여 연결 해제 메소드를 호출하면 파일이 삭제됩니다. 파일에 다음 코드 조각을 추가합니다.
fs.unlink(filePath, error => { if (error) throw error console.log('파일이 삭제되었습니다!')})코드를 다시 실행하면 파일이 삭제됩니다!
이 요점을 확인하세요: https://gist.github.com/catalinpit/b1201434218c400f77e042109bfce99e
mkdir 메소드를 사용하여 비동기적으로 디렉토리를 생성할 수 있습니다. 파일에 다음 코드를 작성합니다.
fs.mkdir(`${process.cwd()}/myFolder/secondFolder`, { recursive: true }, (err) => { if (err) throw err console.log('폴더가 성공적으로 생성되었습니다!') })먼저 현재 작업 디렉터리에 새 폴더를 만듭니다. 앞에서 언급했듯이 cwd() 메서드를 사용하여 프로세스 개체에서 현재 작업 디렉터리를 가져올 수 있습니다.
그런 다음 생성할 폴더를 전달합니다. 그러나 이것이 현재 작업 디렉터리에 새 폴더를 만들어야 한다는 의미는 아닙니다. 어디서나 만들 수 있습니다.
이제 두 번째 매개변수는 재귀 옵션입니다. true로 설정하지 않으면 여러 폴더를 생성할 수 없습니다. 재귀 옵션을 false로 설정하면 위 코드에서 오류가 발생합니다. 한번 시도해 보세요!
그러나 폴더만 생성하려는 경우에는 recursive 옵션을 true로 설정할 필요가 없습니다.
다음 코드는 잘 작동합니다!
fs.mkdir(`${process.cwd()}/myFolder`, err => { if (err) throw err console.log('폴더가 성공적으로 생성되었습니다!')});그러므로 나는 재귀적 사용을 강조하고 싶다. 폴더 내에 폴더를 생성하려면 이를 true로 설정해야 합니다. 폴더가 존재하지 않더라도 모든 폴더를 생성합니다.
반면, 폴더만 생성하고 싶다면 false로 놔두시면 됩니다.
이 요지를 확인하세요: https://gist.github.com/catalinpit/09bad802541102c0cce2a2e4c3985066
디렉터리 삭제 논리는 디렉터리 생성과 유사합니다. 디렉토리를 생성하기 위해 작성한 코드와 아래의 코드를 살펴보면 유사점을 발견할 수 있습니다.
따라서 파일에 다음 코드를 작성하십시오.
fs.rmdir(`${process.cwd()}/myFolder/`, { recursive: true }, err => { if (err) throw err console.log('폴더가 성공적으로 삭제되었습니다!')})파일 시스템 모듈의 rmdir 메소드를 사용하고 다음 매개변수를 전달하십시오:
삭제할 디렉터리 재귀 속성 콜백재귀 속성이 true로 설정된 경우 폴더와 해당 내용이 삭제됩니다. 폴더에 콘텐츠가 포함된 경우 이를 true로 설정해야 한다는 점에 유의하는 것이 중요합니다. 그렇지 않으면 오류가 발생합니다.
다음 코드 조각은 폴더가 비어 있는 경우에만 작동합니다.
fs.rmdir(`${process.cwd()}/myFolder/`, err => { if (err) throw err console.log('폴더가 성공적으로 삭제되었습니다!')})myFolder에 다른 파일 및/또는 폴더가 있는 경우 { recursive: true }가 전달되지 않으면 오류가 발생합니다.
재귀 옵션을 사용해야 할 때와 문제를 피하지 말아야 할 때를 아는 것이 중요합니다.
이 요지를 확인하세요: https://gist.github.com/catalinpit/a8cb6aca75cef8d6ac5043eae9ba22ce
fs 모듈을 사용하면 디렉터리와 파일의 이름을 바꿀 수 있습니다. 다음 코드 조각은 rename 메서드를 사용하여 이 작업을 수행하는 방법을 보여줍니다.
// 디렉토리 이름 바꾸기 fs.rename(`${process.cwd()}/myFolder/secondFolder`, `${process.cwd()}/myFolder/newFolder`, err => { if (err) throw err console .log('디렉터리 이름 바꾸기!')});//파일 이름 바꾸기 fs.rename(`${process.cwd()}/content.txt`, `${process.cwd()}/newFile .txt` , err => { if (err) throw err console.log('파일 이름이 변경되었습니다!')});이름 바꾸기 메소드에는 다음 세 가지 매개변수가 포함됩니다.
첫 번째 매개변수는 기존 폴더/파일이고 두 번째 매개변수는 새 이름 콜백입니다.따라서 파일이나 디렉터리의 이름을 바꾸려면 현재 파일/디렉터리의 이름과 새 이름을 전달해야 합니다. 애플리케이션을 실행한 후 디렉터리/파일 이름을 업데이트해야 합니다.
새 경로가 이미 존재하는 경우(예: 파일/폴더의 새 이름) 덮어쓰게 됩니다. 따라서 실수로 기존 파일/폴더를 덮어쓰지 않도록 주의하세요.
이 요지를 확인하세요: https://gist.github.com/catalinpit/5c3e7c6ae39d09996ff67175a719122e
또한,appendFile 메소드를 사용하여 기존 파일에 새 내용을 추가할 수도 있습니다.
writeFile과 AppendFile의 두 메소드를 비교해 보면 서로 유사하다는 것을 알 수 있습니다. 파일 경로, 콘텐츠, 콜백을 전달합니다.
fs.appendFile(filePath, 'n일만 하고 놀지 않으면 Jack을 멍청한 소년으로 만듭니다!', err => { if (err) throw err console.log('일만 하고 놀지 않으면 Jack을 둔한 소년으로 만듭니다!')} )위의 코드 조각은 기존 파일에 새 콘텐츠를 추가하는 방법을 보여줍니다. 애플리케이션을 실행하고 파일을 열면 내부에 새 콘텐츠가 표시됩니다.