[JAVA] 문자 Stream : FileReader / FileWriter
문자 Stream : FileReader / FileWriter
File Reader와 FileWriter는 파일에 저장된 바이트를 유니코드 문자로 변환해서 읽어 들이거나 출력할 유니코드 문자를 디폴트 문자 인코딩의 바이트로 변환해서 파일에 저장하는 데 사용되는 입출력 클랙스이다.
File Reader와 FileWriter는 각각 InputStreamReader나 OutputStreamWriter의 하위 클래스로 유니코드 문자와 바이트간의 변환 기능을 포함하고 있다.
[JAVA] 문자 Stream : Reader / Writer
[JAVA] 문자 Stream : InputStreamReader / OutputStreamWriter
* FileReader / FileWriter 의 생성자
FileReader는 파일로부터 입력을 위한 스트림을 생성하는 클래스로 데이터가 입력될 파일의 정보를 인자로 받는다.
FileReader 의 생성자 | 설 명 |
FileReader(File file) throws IOException | file로 지정된 파일에 대한 입력 스트림을 생성한다. |
FileReader(FileDescriptor fd) throws IOException | fd로 지정된 FileDescriptor에 대한 입력 스트립을 생성한다. |
FileReader(String fileName) throws IOException | fileName로 지정한 경로의 파일에 대한 입력 스트림을 생성한다. |
FileWriter는 파일로 데이터를 출력하기 위한 출력 스트림을 제공한다.
FileWriter 의 생성자 | 설 명 |
FileWriter(File file) throws IOException | file로 지정된 파일에 대한 출력 스트림을 생성한다. |
FileWriter(File file, boolean append) | file로 지정된 파일에 append 모드를 설정하여 출력 스트림을 생성한다. |
FileWriter(FileDescriptor fd) throws IOException | fd로 지정된 FileDescriptor에 대한 출력 스트립을 생성한다. |
FileWriter(String fileName) throws IOException | fileName로 지정한 경로의 파일에 대한 출력 스트림을 생성한다. |
FileWriter(String fileName, boolean append) throws IOException | fineName로 지정한 경로의 파일에 append 모드를 설정하여 출력 스트림을 생성한다. |
boolean append : True 면 파일의 끝에 출력 데이터를 붙이며, False면 파일에 덮어쓴다.
* FileReader / FileWriter의 메소드는 상위 클래스 (java.lang.Object, java.io.Writer, java.io.OutputStreamWriter)를 상속받는다.
* FileReader / FileWriter 예제
import java.io.File; import java.io.FileReader;
|
- InputStreamReader를 통해 콘솔에서 문자를 입력받는다.
- 문자입력은 "-1" 이 나올때 까지, 그러니까 "Ctrl-Z"를 입력받을때 까지 받으며, FileWriter 객체에 쓴다.
- 문자 입력이 완료되면 flush() 메소드를 통해, FileWriter의 버퍼에 저장된 입력받은 문자를 "sample.txt" 파일에 쓴다.
- FileWriter 개체 생성시, append 인자를 True로 했기 때문에, 입력받은 문자를 "sample.txt"에 쓸때, 기존의 내용 뒤에 붙여서 쓰게 된다.
- 파일에 문자를 입력했으니, 이제 "sample.txt" 파일의 내용을 가져와서 콘솔에 출력해본다.
- FileReader 객체를 생성하고, "sample.txt" 파일로부터 문자를 읽어오면서 콘솔에 출력한다.
- 콘솔의 결과를 보면, 입력은 "개발이 하고 싶어요 FileReader / File Writer ㅋㅋ"를 입력했지만, 출력 결과에 제일 처음에 "안녕하세요"가 붙어있다.
- 이 프로그램이 시작하기전에 "sample.txt" 파일에 "안녕하세요" 가 입력되어 있었으며, 입력받은 내용을 뒤에 붙여서 파일에 썼다. 그리고 그 전체 내용을 읽어와서 콘솔에 뿌려준 것이다.
* FileReader /FileWriter 와 FileInputStream / FileOutputStream 의 차이
FileInputStream / FileOutputStream 과 FileReader / FileWriter 모두 File에 데이터를 입력하고 출력하는 객체이다.
하지만 이 두 종류의 객체는 차이가 있다.
FileInputStream / FileOutputStream 은 InputStream / OutputStream 을 상속받고 있으며, FileReader / FileWriter는 Reader와 Writer를 상속받고 있다. 따라서 FileInputStream / FileOutputStream 은 byte 단위의 입출력을 처리하고 FileReader / FileWriter는 바이트를 문자(Char)로 변환하여 입출력을 처리한다.
FileInputStream / FileOutputStream은 1바이트 이상의 문자인 한글 등을 처리하기 위해 버퍼를 사용해서 처리해야 하지만, FileReader /FileWriter에서는 한글도 처리가 가능하다.
[JAVA] ByteStream : FileInputStream / FileOutputStream
출처: https://hyeonstorage.tistory.com/248?category=578560 [개발이 하고 싶어요]
'JAVA > Java IO' 카테고리의 다른 글
[JAVA] 객체 직렬화 ObjectInputStream / ObjectOutputStream (0) | 2019.08.07 |
---|---|
[JAVA] I/O Char 와 Encoding (0) | 2019.08.07 |
[JAVA] I/O 입출력 클래스의 종류 (0) | 2019.08.07 |
[JAVA] 문자 Stream : BufferedReader / BufferedWriter (파일 복사 예제) (0) | 2019.08.07 |
[JAVA] 문자 Stream : InputStreamReader / OutputStreamWriter (0) | 2019.08.07 |
[JAVA] 문자 Stream : Reader / Writer (0) | 2019.08.07 |
[JAVA] ByteStream : DataInputStream / DataOutputStream (0) | 2019.08.07 |
[JAVA] ByteStream : BufferedInputStream / BufferedOutputStream (파일 복사 예제) (0) | 2019.08.07 |