InputStream : 바이트 단위 입력 클래스.., 영어, 숫자 등..
Reader : 문자 단위 입력 클래스, 한글, 한자 등..
InputStream, Reader 사용시 공통메서드
Reader에서 사용시에는 byte -> char 로 사용
int read() : byte만큼 읽어서 처리(반환), int 형의 정수값을 반환
int read(byte[]) : 배열의 크기만큼 읽어서 처리(반환), int 형의 정수값을 반환(배열에 실제 읽어들인 갯수 반환)
int read(byte[], int, int) : 바이트배열을 읽어서 입력, 몇번째부터, 입력받을 갯수
int read() : char만큼 읽어서 처리(반환), int 형의 정수값을 반환
int read(char[]) : 배열의 크기만큼 읽어서 처리(반환), int 형의 정수값을 반환(배열에 실제 읽어들인 갯수 반환)
int read(char[], int, int) : 캐릭터배열을 읽어서 입력, 몇번째부터, 입력받을 갯수
소스
public static void main(String[] args) {
// 바이트 단위 입력 클래스 : InputStream
InputStream in = System.in;
try {
/*
// 바이트값의 입력을 대기하는 상태가 된다. 엔터 입력시까지
int c = in.read();
// 정수형값(아스키코드)을 반환하기 때문에 입력한 값을 보기 위해서는 형변환해서 출력
System.out.println(c);
// 두자를 입력할경우 앞에 ch 출력 후 바로 뒤에 ch값을 출력한다
c = in.read();
System.out.println(c);
c = in.read();
System.out.println(c);
c = in.read();
System.out.println(c);
*/
/*
한자를 입력 후 엔터를 입력할 경우 엔터는 \r\n으로 입력되어 2byte를 입력받게 됨
System.out.println((int)'\r'); // 10
System.out.println((int)'\n'); // 13
sc.nextLine() 같이 줄단위로 입력을 받는 메서드들은 개행문자를 제외한 값을 반환한다
*/
while(true) {
int ch = in.read();
System.out.print((char)ch);
}
} catch (Exception e) {
e.printStackTrace();
}
}
결과
1 // 입력한 값
1
a // 입력한 값
a
바이트 단위 입력 클래스 : InputStream
한글 처리가 불가능 : byte 단위로 읽어서 바로 처리하기 때문에..
*/
InputStream in = System.in;
/*
문자 단위 처리를 이용해서 한글 처리
System 환경에서는 InputStream만 제공되며 Reader를 포함하지 않음
InputStream (in) 기능을 사용하여 Reader 단위로 처리
소스
public static void main(String[] args) {
/*
바이트 단위 입력 클래스 : InputStream
한글 처리가 불가능 : byte 단위로 읽어서 바로 처리하기 때문에..
*/
InputStream in = System.in;
/*
문자 단위 처리를 이용해서 한글 처리
System 환경에서는 InputStream만 제공되며 Reader를 포함하지 않음
InputStream (in) 기능을 사용하여 Reader 단위로 처리
*/
// InputStreamReader isr = new InputStreamReader(System.in);
InputStreamReader isr = new InputStreamReader(in);
try {
while(true) {
int ch = isr.read();
System.out.print((char)ch);
}
} catch (Exception e) {
e.printStackTrace();
}
}
결과
김 // 입력한 값 (한글 가능)
김
1 // 입력한 값
1
a // 입력한 값
a
InputStream의 하위 클래스 활용하기 - 파일 읽기
소스
blic static void main(String[] args) {
// 입출력시에는 close 작업도 항상 함께 해야한다! try-catch-finally! 자원관리.
// try문 외에 catch, finally에서 닫을 수 있도록 위에 try문 밖에 선언
//FileReader fis = null;
FileInputStream fis = null;
try {
//File f = new File("data/lec13/test09.txt");
//fis = new FileInputStream(f);
//fis = new FileReader("data/lec13/test09.txt");
fis = new FileInputStream("data/lec13/test09.txt");
while(true) {
int ch = fis.read();
// 더이상 읽을 내용이 없을때는 -1을 반환
if(ch == -1) break;
System.out.print(ch);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// read한 fis를 닫는 작업, 정상적인 작업 후, 오류발생시 무조건 닫아야 하기 때문에 finally에 선언
try {
fis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
결과
234176128 // 테스트 파일의 내용
OutputStream : 바이트 단위 출력
Writer : 문자 단위 출력
OutputStrem
write(int) : 1byte 처리 한다.
write(byte[]) : 배열의 전체내용을 출력
write(byte[], int, int) : 배열의 내용을 지정한 순서에서 지정한 크기만큼 출력
Writer
write(int) : char 처리 한다.
write(char[]) : 배열의 전체내용을 출력
write(char[], int, int) : 배열의 내용을 지정한 순서에서 지정한 크기만큼 출력
소스
public static void main(String[] args) {
FileWriter fos = null;
try {
// test10.txt 파일에 작업한다. 없으면 생성하고, 있으면 덮어쓰기된다.
// 파일의 내용을 덮어쓰지 말고 추가하기 위해 (경로, true) 할 경우 append 가 설정
fos = new FileWriter("data/lec13/test10.txt", true);
fos.write(100); // d
fos.write(101); // e
fos.write(102); // f
fos.write('d'); // d
// 한글을 올바르게 쓰기 위해 Writer 클래스 필요
fos.write('가'); //
System.out.println("파일 쓰기 성공~");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
결과
파일 쓰기 성공~
Java - IO, PrintWriter 사용 (0) | 2018.10.02 |
---|---|
Java - IO, File 클래스를 이용한 파일 복사 (0) | 2018.10.02 |
Java - IO, 파일 속성 확인 (0) | 2018.10.02 |
Java - IO, 디렉토리 하위의 목록 가져오기 (0) | 2018.10.02 |
Java - IO, 파일 생성, 파일 삭제 (0) | 2018.10.01 |
댓글 영역