Java_18_파일 입·출력, OpenCSV 라이브러리

OngTK·2025년 8월 2일

Java

목록 보기
18/35

1. 파일 입·출력 클래스


※ 파일 입출력 클래스 사용시 반드시 try-catch 예외처리 필요!

  • Java에서 작성한 String, int 등을 파일로 저장하기 위해서는, 해당 내용을 byte로 바꿔야함.
  • 또한 파일에 저장된 byte를 java로 불러일으킬 때, 또 다시 번역이 필요함

1) FileOutputStream class

  • 쓰기·출력·내보내기(Java > web, local file)

(1) .write( 바이트배열 )

  • 바이트 배열을 지정된 파일에 작성하는 함수

(2) 문자열.getBytes()

  • 문자열을 바이트 배열로 반환하는 함수
public class Practice {
    public static void main(String[] args) {
        // [1] 파일 쓰기
        // [1.1] 파일 경로
        String path = "./src/test1.txt"; //파일의 위치, 절대경로 or 상대경로
        
        // [1.3] 예외처리 (FileNotFoundException)
        try {
            // [1.2] 파일 출력 FileOutputStream 객체 생성
            // - FileOutputStream >> 무조건 일반예외 경고 발생함
            FileOutputStream fout = new FileOutputStream(path);
            
            //[1.4] 파일에 쓰기 .write(바이트 데이터)
            //[1.5] 문자열의 바이트로 변환 : "문자열".getBytes() >> 무조건 일반예외 발생
            fout.write("자바에서 작성한 텍스트입니다.".getBytes());
        } catch (FileNotFoundException e) {
            System.out.println("파일 또는 경로가 존재하지 않습니다." + e );
        } catch (IOException e) {
            System.out.println("입출력 도중에 오류가 발생합니다." + e );
        }
    }
}

// 결과 
// 위치 : ./src
// 파일명 : test1.txt
// 내용 : 자바에서 작성한 텍스트입니다.

2) FileInputStream

  • 읽기·입력·가져오기(web, local file > Java)

(1) .read( 바이트배열 )

  • 바이트 배열에서 읽어온 파일들을 저장하는 함수

(2) new String(바이트 배열)

  • 바이트 배열을 문자열로 반환하는 함수
public class Practice {
    public static void main(String[] args) {
        // [2] 파일 읽기
        // [2.1] 경로 선언
        String path = "./src/test1.txt";
        
        // [2.2] 파일 입력 FileInputStream 객체를 생성
        // FileInputStream >> 무조건 예외 발생
        try {
            FileInputStream fin = new FileInputStream(path);

            // [2.3] 읽어온 바이트를 저장할 배열 선언
            byte[] bytes = new byte[42];

            // [2.4] bytes에 읽어오기 : .read( 바이트배열 ); >> 무조건 예외 발생
            fin.read(bytes);

            // [2.5] new String( 바이트배열 ); 읽어온 바이트를 문자열로 변환
            System.out.println(new String(bytes));
            
        } catch (FileNotFoundException e ){
            System.out.println("파일 또는 경로가 존재하지 않습니다." + e );
        } catch (IOException e){
            System.out.println("파일을 읽는데 문제가 발생했습니다." + e);
        }
    }
}

// 결과 
// console : 자바에서 작성한 텍스트입니다.

2.OpenCSV 라이브러리


자바에서 CSV 파일 읽기·쓰기를 편하게 해주는 API들을 제공하는 라이브러리

1) 라이브러리 등록 방법

  • jar 파일을 원하는 package로 이동 > 우클릭 > add as library

2) OpenCSV· 관련 객체와 함수

(1) new CSVReader( new FileReader( 경로 ) )

CSV를 입력하는 클래스

(2) new CSVWriter( new FileWriter( 경로 ) )

CSV 출력하는 클래스

3) 파일 In·Out 관련 객체와 함수

(1) new FileReader( 경로, Charset.forName(인코딩))

경로로부터 파일을 읽어오고, 언어에 따라서 인코딩 언어를 설정할 수 있음

(2) .writeAll( List객체 )

List 객체를 CSV로 내보내는 함수

(3) .readAll()

List<String[]> 타입으로 반환하는 함수


public class Practice {
    public static void main(String[] args) {
        try {
            // [1] OpenCSV 라이브러리 사용해보기
            // [1.1] 파일 경로 지정
            String path = "src/업소List.csv";

            // [1.2] FileReader로 파일 읽기모드 객체 만들기 +try·catch 예외처리 + 한글 인코딩
            // new FileReader( 경로, Charset.forName(인코딩))
            FileReader fileReader = new FileReader(path, Charset.forName("EUC-KR"));

            // [1.3] CSV Reader 클래스를 이용하여 읽기모드 객체 읽기
            CSVReader csvReader = new CSVReader(fileReader);

            // [1.4] .readAll() : List<String[]> 타입으로 반환하는 함수
            List<String[]> inData = csvReader.readAll();
            // ArrayList : 구현체 // List : 인터페이스

            System.out.println(inData);

            // [1.5] 반복문
            for (int i = 0 ; i < inData.size() ; i++){
                String[] row = inData.get(i);
                System.out.printf("업소명 : %s, 지정메뉴 : %s \n",row[1],row[3]);
            }

        }catch (Exception e){
            System.out.println("예외발생 " + e);
        }
    }
}
profile
2025.05.~K디지털_풀스택 수업 수강중

0개의 댓글