본문 바로가기
네이버클라우드/JAVA 웹 프로그래밍

JAVA 28일차 (2023-06-30) 자바 기초 DAY26_자바 프로그래밍_character stream API를 사용하여 CSV 텍스트 형식으로 입출력하기_개인프로젝트 - 마트 관리 시스템

by prometedor 2023. 7. 1.
## 33. character stream API를 사용하여 CSV 텍스트 형식으로 입출력하기

- CSV 형식으로 데이터를 읽고 쓰는 법
- FileReader/FileWriter 사용법

SaveXxx 파일 수정

App.java

ㄴ FileWriter, BufferedWriter, PrintWriter 사용

 

FileWriter 

텍스트 파일에 문자 단위로 데이터를 쓰기 위해 사용되는 클래스

ㄴ FileWriter를 사용하여 파일에 텍스트를 기록할 수 있음

 

BufferedWriter

ㄴ Writer 클래스를 상속받아 버퍼링 기능을 제공하는 클래스

ㄴ 버퍼링은 데이터를 일시적으로 메모리에 저장해두었다가 한 번에 파일에 쓰는 작업을 수행하여 입출력 성능을 향상시키는 역할을 함

 

PrintWriter

ㄴ Writer 클래스를 상속받아 텍스트를 출력하는 기능을 제공하는 클래스

ㄴ PrintWriter는 다양한 데이터 타입의 값을 문자열로 변환하여 출력할 수 있음

App.java

ㄴ 해당 코드는 필요없으므로 제거

 

App.java

ㄴ PrintWriter의 printf 메서드를 사용하여 형식화된 문자열을 파일에 출력

=> %d, %s, %c와 같은 포맷 지정자를 사용하여 Member 객체의 필드 값을 형식에 맞게 출력

ㄴ 주의! => 공백 띄우면 안 됨

 

=> Item, Board 도 동일하게 적용

 

App.java

ㄴ saveMember, saveItem, saveBoard 메서드에 각각 csv 형식의 파일 이름과 List 객체를 넘겨줌

 

실행하여 CSV 파일 형식으로 저장 후 Text Editor 이용하여 확인

=>

ㄴ .csv 형식으로 파일 저장됨

 

 

LoadXxx 파일 수정

App.java

ㄴ FileReader 와 BufferedReader 를 이용하도록 함

=> line 을 이용하여 

 

App.java

ㄴ 해당 코드는 필요없으므로 제거

 

App.java

ㄴ for 문 -> while 문으로 변경 후 line 을 , 단위로 split 하도록 코드 작성

=> 파일에서 각 줄을 읽어와서 쉼표를 구분자로 사용하여 값을 분할하도록 함

 

App.java

ㄴ 파일에서 각 줄을 읽어와서 쉼표를 구분자로 사용하여 값을 분할하고, 새로운 Member 객체를 생성하고 추출한 값으로 해당 객체의 필드를 채우는 반복문

ㄴ 생성된 Member 객체를 list에 추가

ㄴ no, position 은 각각 int, char 값이므로 각각 캐스팅 필요 (문자열(String값)로 받아오기 때문)

     ㄴ board 에서의 경우 long 타입의 값이 있으므로 Long.parseLong() 이용

ㄴ readLine() 메서드는 BufferedReader 클래스에서 제공되는 메서드로, 텍스트 파일에서 한 줄을 읽어옴

=> 파일의 끝에 도달하거나 오류가 발생할 때까지 한 줄씩 읽어옴

     ㄴ 파일의 끝에 도달하면(읽은 줄이 없으면) null을 반환함


* readLine() 메서드의 동작
ㄴ 파일에서 다음 줄을 읽어오기
ㄴ 읽은 줄이 없으면(파일의 끝에 도달한 경우) null을 반환
ㄴ 읽은 줄이 있다면 문자열 형태로 반환
ㄴ 다음에 호출될 때는 파일에서 다음 줄을 읽어옴

 

App.java

ㄴ csv 파일을 읽어오도록 filename 을 저장된 csv 파일로 설정해줌