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()
가 수행된다.File
Class - File Class가 가지는 메소드들에 대해서는 여기를 참조하자.BufferedInputStream
- JavaDoc - BufferedInputStreamBufferedOutputStream
- JavaDoc- BufferedOutputStreamBufferedReader
- JavaDoc - BufferedReaderBufferedWriter
- JavaDoc - BufferedWriterBufferedReader
에는BufferedInputStream
에는 없는readLine()
메소드가 존재하고BufferedWriter
에는BufferedOutputStream
에는 없는newLine()
메소드가 존재한다.
출처
아래의 글들을 교재삼아 작성하였습니다.