JAVA에서의 파일 입출력은 Stream(데이터의 흐름)을 통해 이루어진다.
Stream은 다음과 같이 나눌 수 있다.
- 흐름의 방향
- Input
- Output
- Data Type
- Byte
- Character
Byte stream
Byte stream의 경우 아래와 같은 Class들을 사용할 수 있다.
[ Tutorials Point 에서 퍼온 그림 ]
아래 소스는 input.txt를 8-bit Byte 단위로 data를 읽어서 output.txt 에 복사한다.
|
|
Character stream
Character stream은 16-bit unicode 단위로 data를 처리한다.
Byte stream과 다른 점은 FileReader와 FileWriter를 사용한다는 것이다.
이 두 가지 Class는 내부적으로는 FileInputStream과 FileOutputStream을 사용하지만 한 번에 2 byte 씩 처리한다는 것이 차이점이다.
아래 소스는 input.txt를 16-bit, 2 Byte 단위로 data를 읽어서 output.txt 에 복사한다.
|
|
Scanner
위에서 본 것과 같이 입력 파일 처리 시 Byte 또는 Character 단위로 read 하기 때문에 (물론 BufferedReader는 Line 단위로 읽을 수 있지만) Parsing이 상당히 귀찮아진다.
Java 5부터 추가된 Scanner를 사용하면 귀찮은 작업을 건너뛸 수 있다. 변수 및 메소드에 대한 정의는 여기를 참조하자. 다양한 type을 지원하며, 정규표현식 (REGEX-Regular Expression-)도 지원한다.
주의할 점은 Scanner 또한 File을 다루기 때문에 close()를 해줘야 한다는 것과 character type과 관련된 메소드는 제공하지 않는다는 것이다.
아래 코드는 input.txt에서 내용을 읽어서 parsing 후 콘솔로 출력한다.
|
|
추가정보
flush()- Buffer의 내용을 출력(흘려보내고)하고 비운다.close()- 메모리가 낭비되지 않도록close()를 호출해줘야 하고,close()가 호출 될 때 자동으로flush()가 수행된다.FileClass - File Class가 가지는 메소드들에 대해서는 여기를 참조하자.BufferedInputStream- JavaDoc - BufferedInputStreamBufferedOutputStream- JavaDoc- BufferedOutputStreamBufferedReader- JavaDoc - BufferedReaderBufferedWriter- JavaDoc - BufferedWriterBufferedReader에는BufferedInputStream에는 없는readLine()메소드가 존재하고BufferedWriter에는BufferedOutputStream에는 없는newLine()메소드가 존재한다.
출처
아래의 글들을 교재삼아 작성하였습니다.