본문 바로가기
프로그래밍 공부/Java

[lesson] Java 프로그래밍 언어 - 파일 입출력

by Luna_lua 2021. 8. 11.
반응형

지금까지 API를 제외하고 내부에서 작업을 했는데 드디어 이번에는 파일을 불러와 작업하는 것을 배워보려 합니다.

이번 파일 입출력은 JAVA Application 관점에서 설명해보려 합니다.

(데이터) Stream은 운영체제를 통해서 다른곳으로 가며, 오늘 설명하는것은 네트워크 관점입니다. 

 

우리의 기준으로 봤을때 Writer와 Reader중에서 무엇이 출력이고, 무엇이 입력일까요?

입력은 쓰는것이니까 Writer? / 입력 말그대로 읽는것이니까 Reader?

 

우리는 파일입출력을 우리의 기준이 아닌 프로그램 즉, 자바의 기준으로 봐야합니다. 

System.out.println()을 우린 출력메소드라고 했습니다. 우리는 표현할 내용을 작성하여 출력해주는 메소드 즉, 글을 써서 내보내는것을 출력이라고 배웠습니다. 이 말을 듣고 다시보면 바로 Writer가 출력이라고 보이게 될 것입니다.

 

 

<Writer (출력)에는 3가지 클래스가 있습니다.>

 - BufferedWriter : 버퍼를 사용한 출력 클래스
 - FileWriter : 전달한 경로의 파일을 출력하기 위한 목적으로 열어준다. 전달한 경로에 파일이 없다면 새롭게 만든 후 열어준다.
                          (FileWriter에서 경로를 찾지못하면 새로 파일을 만들어 준다.) 

- File : 전달한 경로에 있는 파일의 정보를 담는 타입. 전달한 경로에 파일의 유무검사, 파일 삭제 등

=> 주로 파일을 출력할때 new BufferWriter( new FileWriter(경로 또는 파일이름 (확장자 포함) );

      - 출력을 위해 BufferWriter를 사용하며

        경로에 파일을 출력하기 위해 경로에 파일을 가져오고, 덮어쓰기 위해 FileWriter를 사용한다.

 

<Reader (입력)에도 3가지 클래스가 있습니다.>

 - BufferedReader : 버퍼를 사용한 입력 클래스 


 - FileReader : 전달한 경로의 파일을 입력하기 위한 목적으로 열어준다.  전잘한 경로에 파일이 없다면                   

                   FileNoteFoundException이 발생한다.

                  (FileReader에서 경로를 찾지못하면 읽기 불가!)

 - File : *출력의 File과 동일*

=> 주로 파일을 입력할때 new BufferReader( new FileReader(경로 또는 파일이름 (확장자 포함) );

      - 입력을 위해 BufferReader를 사용하며

        경로에 파일을 입력하기 위해 경로에 파일을 읽어오기 위해 FileReader를 사용한다.

 

 

 

주의할점! 실습을 하기위해 패키지의 경로 안에 .txt 파일이 있어야 합니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileTest {
		// 파일에 읽고 쓰는 문제에서, Exception이 일어날수 있으나,
        // 처리를 View단에서 하기 위해 throws IoException을 사용한다.
	public static void main(String[] args) throws IOException {
    		// FileWriter에서 파일의 정보와 경로를 가져오고
            // 출력을 위해 BufferedWriter를 사용한다.
            // FileWriter("경로", true)는 이어서 쓸것인지 결정을 하고
            // 이어 쓸것이라면 true, 새로 쓸것(덮어쓰기)이라면 생략한다.
		BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt", true));
		bw.write("티스토리");
        // BufferedWriter를 모두 사용했으면 close()로 닫아준다 (사용 완료의 의미)
		bw.close();

		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader("test.txt"));

			String line = null;
			while ((line = br.readLine()) != null) {
				System.out.println(line);
			}
			// 파일을 찾지 못했을때의 오류
		} catch (FileNotFoundException e) {
			System.out.println("파일을 찾지 못했습니다.");\
            // 나머지 모든 오류 처리
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
        	// 모두 완료했다면 finally를 사용한다.
			if (br != null) {
				br.close();
			}
		}
	}
}

 

 

 

 

 

반응형