파일 읽기 및 쓰기
Tailwind Traders 애플리케이션은 각 저장소의 판매 데이터를 읽은 다음 합계를 계산한 다음, 모든 개별 저장소 판매 파일의 합계를 새 파일에 기록해야 합니다.
fs.readFile을 사용하여 파일에서 데이터 읽기
fs 모듈의 readFile
메서드를 통해 파일을 읽습니다.
await fs.readFile("stores/201/sales.json");
readFile
메서드의 반환 개체는 Buffer
개체입니다. 이진 형식의 파일 내용이 포함됩니다. 예를 들어 다음 내용이 포함된 sales.json이라는 파일이 있다고 가정하겠습니다.
{
"total": 22385.32
}
readFile
메서드의 반환 값을 기록하면 Buffer
가 제공됩니다.
<Buffer 7b 0a 20 20 22 74 6f 74 61 6c 22 3a 20 32 32 33 38 35 2e 33 32 0a 7d>
이 결과는 유용하지 않습니다. 파일을 읽었을 수도 있지만 확실히, 이 데이터는 “읽을” 수 없습니다. 그래도 괜찮습니다. JavaScript는 합계를 Buffer
계산하는 데 사용할 수 있는 문자열 값으로 값을 변환할 수 있습니다. String
개체를 호출하고 버퍼를 전달하면 됩니다.
const bufferData = await fs.readFile("stores/201/sales.json");
console.log(String(bufferData));
출력은 다음과 같습니다.
{
"total": 22385.32
}
JSON.parse를 사용하여 데이터 구문 분석
문자열 형식의 이 데이터는 별로 유용하지 않습니다. 여전히 문자일 뿐이지만 이제 읽을 수 있는 형식입니다. 이 문자열을 프로그래밍 방식으로 액세스할 수 있는 데이터(구문 분석 데이터라고 함)로 변환하는 기능을 원합니다.
JavaScript에는 JSON 파일에 대한 기본 제공 파서가 포함되어 있습니다. 아무것도 포함하지 않아도 파서를 사용할 수 있습니다. JSON
개체만 사용하면 됩니다. 뿐만 아니라 구문 분석하기 전에 Buffer
값을 문자열로 변환할 필요도 없습니다. JSON.parse
메서드가 이 작업을 수행할 수 있습니다. JSON.parse 는 API가 인터넷을 통해 데이터를 문자열로 수신한 다음 JSON 개체로 전환해야 할 때 웹 개발에서 자주 사용하는 일반적인 방법입니다.
// read the file as string
const fileContents = await fs.readFile("stores/201/sales.json");
// turn string into JSON
const data = JSON.parse(fileContents);
// access the value by the property key `total`
console.log(data.total);
출력은 다음과 같습니다.
22385.32
팁
다양한 형식의 파일이 있습니다. JSON 파일은 언어의 기본 제공 지원 때문에 가장 바람직한 작업 파일 형식입니다. 그러나 .csv 파일, 고정 너비 파일 또는 다른 형식의 파일을 발견할 수도 있습니다. 이 경우 npmjs.org에서 해당 파일 형식의 파서를 검색하는 것이 가장 좋습니다.
fs.writeFile을 사용하여 파일에 데이터 쓰기
이전 연습에서 파일을 작성하는 방법을 배웠습니다. 빈 파일을 작성한 것뿐입니다. 파일에 데이터를 쓰려면 동일한 writeFile
메서드를 사용하되, 쓰려는 데이터를 세 번째 매개 변수로 전달하면 됩니다.
// read the file as string
const fileContents = await fs.readFile("stores/201/sales.json");
// turn string into JSON
const data = JSON.parse(fileContents);
// file name is totals.txt
const filePath = path.join("salesTotals","totals.txt");
// write the total to the "totals.json" file
await fs.writeFile(filePath, data.total);
파일의 totals.txt
내용은 다음과 같습니다.
22385.32
fs.writeFile을 사용하여 파일에 데이터 추가
앞의 예제에서는 파일에 쓸 때마다 파일을 덮어씁니다. 데이터를 완전히 바꾸는 대신 파일에 추가하려는 경우가 있습니다. writeFile
메서드에 플래그를 전달하면 데이터를 추가할 수 있습니다. 기본적으로 플래그는 파일 바꾸기를 의미하는 플래그w
로 설정됩니다. 대신 파일에 추가하려면 플래그를 a
전달합니다. 즉, 추가를 의미합니다.
// read the file as string
const fileContents = await fs.readFile("stores/201/sales.json");
// turn string into JSON
const data = JSON.parse(fileContents);
// file name is totals.txt
const filePath = path.join("salesTotals","totals.txt");
// write the total to the "totals.json" file
await fs.writeFile(filePath, `${data.total}\r\n`, {flag: "a"});
파일의 totals.txt
내용은 다음과 같습니다.
22385.32
팁
이전 코드 예제에서 \r\n
은 값을 새 줄에 입력하도록 JavaScript에 지시합니다. 이 값(‘캐리지 리턴 줄 바꿈’이라고 함)을 전달하지 않으면 모든 숫자가 한 줄에 입력됩니다.
다음 연습에서는 모든 매출 파일을 읽고 .txt 파일에 총합계를 써서 Tailwind Traders의 매출 합계 프로젝트를 완료합니다. 그러면 회사의 상거래 시스템에서 파일을 처리할 수 있습니다.