티스토리 뷰
char 단위 입출력(Reader/Writer)
문자 단위로 입출력(*메소드는 byte와 거의 똑같음)
※ char 단위 입출력 관계 ※
추상클래스인 Reader/Writer는 객체 생성 불가. 상속받은 File/Bufferd/DataInput/OutputStream에서 구현.
Redaer/Writer (추상클래스) | |||
FileRedaer/Writer | BufferedRedaer/Writer | InputStreamReader /OutputStreamWriter |
PrintWriter |
1. Reader/Writer
(1) 객체 생성
(2) 주요 메소드
_예시로 확인)
write()는 문자열 출력할 수 있다.
그냥 읽으면 하나씩 읽어오는데 buffered 사용하면 한 라인씩 읽어온다. readLine()
package aa;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class ReaderWriterTest {
public static void main(String[] args) {
//파일 만들어서 기록하는 것부터 시작
File file1 = new File("abc/file1.txt");
//try 쓰는 이유. 종료되라고?
try(Writer wr = new FileWriter(file1);){
char[] aa = "안안".toCharArray();
wr.write("안녕하세요"); //문자열 받을 수 있음.
wr.write(aa);
wr.write('A');
wr.write("반갑습니다", 2, 3);
wr.write("안녕하세요");
wr.flush();
}catch(IOException e) {}
//읽어오는 것. 콘솔 출력.
//요거는 한꺼번에 안 되서 버퍼사용
try(Reader r = new FileReader(file1);){
int data;
while((data = r.read())!= -1) {
System.out.println((char)data); //하나씩(바이트?)로 받아옴. //버퍼 추가.
}
}catch(IOException e) {}
System.out.println("==========Buffered==========");
//한줄씩(한 라인씩) 읽으려면 버퍼 쓰면 된다.
try(Reader r = new FileReader(file1);
BufferedReader br = new BufferedReader(r)){
String data;
while((data = br.readLine())!= null) {
System.out.println(data);
}
}catch(IOException e) {}
}//main
}
-결과 출력
안 녕 하 세 요 안 안 A 습 니 다 안 녕 하 세 요 ==========Buffered========== 안녕하세요안안A습니다안녕하세요 |
2. InputStreamReader/OutputStreamWriter
트워크 통신하면서 자료를 주고받을때, 스트림만 왔다갔다 함. 프로그램에서 사용하는 형태로 바꾸고 싶다. 스트림을 문자로 만들어서 사용하겠다. 버퍼 안에 InputStreamReader/OutputStreamWriter가 들어있는 경우가 많다.
스트림형태로 만들어서 입력해둔 것을 '문자 형태'로 만들어서 가져오는 것
└InputStreamReader : Charset에 따라 문자를 읽어들여 문자형태로 저장
└OutputStreamWriter : Charset에 따라 문자를 읽어들여 문자형태로 출력
*메모장 UTF-8 *이클립스 MS949로 저장하면 메모장 파일이 ANSI로 바뀜
(1) 예시
(1-1) out1.txt 파일 생성
package aa;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class OutputStreamTest01 {
public static void main(String[] args) throws IOException {
//추상메소드라 OutputStream으로 객체 생성 불가능.
File outFile = new File("abc/out1.txt");
OutputStream os1 = new FileOutputStream(outFile);
//배열
byte[] byteArray1 = "Hello!".getBytes(); //Hello!를 배열 변환
os1.write(byteArray1);
os1.write('\r');
os1.write('\n');
byte[] byteArray2 = "자바 프로그래밍".getBytes();
os1.write(byteArray2, 5, 11); //인덱스 5번부터
os1.flush();
os1.close();
}
}
-결과 : txt 파일이 ANSI로 저장되어서 한글이 깨져서 보임.
Hello! ??꾨줈洹? |
*메모장에서 MS949 입력된 상태일 때.
스트림으로 글자 저장. 한글이 깨져서 저장될 수도 있음. 깨져서 저장되어 있는 것을 문자로 바꾸는 것.
네트워크 통신은 무조건 스트림으로 옴. 그걸 문자로 변환해서 가져오는 것. InputStreamReader
package aa;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class InputStreamReaderTest {
public static void main(String[] args) {
//객체 생성
File inFile = new File("abc/out1.txt");
//
try(InputStream is = new FileInputStream(inFile);
InputStreamReader isr = new InputStreamReader(is, "MS949");){
int data;
while((data =isr.read())!= -1) { //데이터가 있을 때까지 반복
System.out.print((char)data);
}
System.out.println(isr.getEncoding());
}catch(IOException e){
}
}
}
결과출력
Hello! � �봽濡쒓렇MS949 |
-버퍼사용시
package aa;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class InputStreamReaderTest {
public static void main(String[] args) {
//객체 생성
File inFile = new File("abc/out.txt");
//
try(InputStream is = new FileInputStream(inFile);
InputStreamReader isr = new InputStreamReader(is, "MS949");
BufferedReader br = new BufferedReader(isr);){
String data;
while((data =br.readLine())!= null) { //데이터가 있을 때까지 반복
System.out.println(data);
}
System.out.println(isr.getEncoding());
}catch(IOException e){
}
}
}
-결과 출력
Hello! � �봽濡쒓렇 MS949 |
3. FileReader/Writer
FileReader/Writer
4. BufferedReader/Writer
BufferedReader/Writer
'수업 > └Java' 카테고리의 다른 글
[CH17]람다식 (0) | 2022.02.10 |
---|---|
[CH16_1]파일(File)과 문자셋(Charset) (0) | 2022.02.09 |
[CH14_1]컬렉션 프레임워크 : List<E> (0) | 2022.02.08 |
[CH12]Thread (0) | 2022.02.07 |
[실습문제6_1]Person, Customer, Test (0) | 2022.02.04 |
- Total
- Today
- Yesterday
- border-spacing
- 미디어 태그
- html base tag
- html layout
- initialized
- html atrribute
- improt
- scanner
- CascadingStyleSheet
- css
- 변수
- empty-cell
- typeof
- caption-side
- 기본선택자
- html a tag
- html
- text formatting
- JavaScript
- input type 종류
- html pre
- Java
- BAEKJOON
- 스크립태그
- A%B
- 입력양식
- 외부구성요소
- ScriptTag
- html input type
- selcetor
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |