KoreaIt Academy/JAVA

24. JAVA의 파일 입출력(txt파일로 저장 및 읽기)

hongeeii 2021. 7. 29.
728x90
반응형

java.io 패키지에는 문자 단위 입출력을 위한 최상위 입출력 클래스 WriterReader가 있습니다.

 

Writer

writer의 하위 클래스로는 아래의 클래스 등이 있습니다.

  • BufferedWriter : 버퍼를 사용한 출력 클래스입니다
  • FileWriter : 전달한 경로의 파일을 출력하기 위한 목적으로 열어줍니다.
         전달한 경로에 파일이 없다면 새롭게 만든 후 열어줍니다.
  • File : 전달한 경로에 있는 파일의 정보를 담는 타입.
           전달한 경로에 파일의 유무 검사, 파일 삭제 등

 

Reader

reader의 하위 클래스로는 아래의 클래스 등이 있습니다.

  • BufferedReader : 버퍼를 사용한 입력 클래스입니다.
  • FileReader : 전달한 경로의 파일을 입력하기 위한 목적으로 열어줍니다.
         전달한 경로에 파일이 없다면 FileNotFoundException이 발생합니다.
  • File : *출력의 File과 동일합니다.*


이중 BufferedReader BufferedWriter는 이름에서처럼 버퍼를 사용하여 파일 입,출력을 수행하며

속도적인면에서 향상된 모습을 보입니다.

※ 버퍼(buffer) : 어떤 장치에서 다른 장치로 데이터를 송신할 때 일어나는 시간의 차이나 데이터 흐름의 속도 차이를

                      조정하기 위해 일시적으로 데이터를 기억시키는 임시 기억장치 입니다.

 

 

파일 입력(BufferedWriter)

텍스트파일에 텍스트를 입력하기 위해서 먼저 BufferedWriter 객체를 다음과 같이 선언해 줍니다.

BufferedWriter bw = new BufferedWriter(new FileWriter("test.txt"));

BufferedWriter와 FileWriter 클래스를 사용하기 위해서 java.io.BufferedWriter와 java.io.FileWriter를 import 해줍니다.

그리고 BufferedWriter 객체를 선언해 주면 try, catch문을 사용하거나 throws를 선언하여 예외처리를 해 주어야 합니다.

test.txt파일에 데이터를 쓸때는 write() 메소드를 사용합니다.

 

만약 FileWriter의 생성자 매개변수에 생성되지 않은 파일명을 쓰면 에러가 나지않고 새로운 이름의 파일이 생성됩니다.

 

FileWriter의 생성자가 보이는데요, 뒤에 boolean append가 붙은 생성자가 보입니다.

default는 false로 , true로 설정을 하면 파일이 덮어쓰기가 되지않고, 원래의 파일에 텍스트가 이어서 써집니다.

*flush()에 대해

BufferedWriter는 데이터 스트림을 버퍼에 저장 해 두었다가 가득 차면 디스크에 쓰는 방식입니다.

flush()함수는 버퍼가 가득 차지 않아도 명시적으로 디스크에 내용을 쓰라는 함수인데,

자주 사용하면 메모리와 속도적인 측면에서 많이 비 효율적입니다.

또한 위와 같은 간단한 코드에서는 close()함수를 호출하여 객체를 닫아주면 자동으로 객체를 닫기 전

flush()함수를 호출하게 됩니다.

 

 

파일 출력(BufferedReader)

이번에는 저장한 파일을  읽어 봅시다.

파일 읽기를 위해 BufferedReader 객체를 다음과 같이 선언해 줍니다.

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


BufferedWriter과 마찬가지로 java.io.BufferedReader와 java.io.FileReader를 import 해줍니다.

또한 FileReader 객체를 만들어 줌으로써 FileNotFoundException에 대해 예외처리를 해 주어야합니다.

 

만약 FileReader의 생성자 매개변수에 생성되지 않은 파일명을 쓰면 FileNotFoundException의 에러가 발생합니다.

따라서 try catch문으로 에러처리를 하였습니다.

한 줄씩 읽는 메소드는 readLine() 메소드 입니다. 읽을때는 줄바꿈(\n)을 가져오지 않습니다.

사용이 끝난후엔 finally문에서 close()를 꼭 해주도록 합니다.

 

※ '\n' , '\t' 등까지 모두 복구하기 위해서는 바이트배열로 받아와야 합니다.

    Files.readAllBytes(Paths.get(Uri uri)); 메소드를 사용합니다.

    String line = new String(Files.readAllBytes(Paths.get(Uri uri)))); 이렇게 하면 문자열 배열로 복구할 수 있습니다.

 

 


이상으로 파일의 입출력에 대해 알아보았습니다.

728x90
반응형

추천 글