상세 컨텐츠

본문 제목

Java - IO, InputStream, OutputStream

개발/Java

by 뉴에이스 2018. 10. 2. 14:37

본문

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();
		}
	}
}

 

결과

 

파일 쓰기 성공~

관련글 더보기

댓글 영역