[211126] 교육 26일차

oxllz·2022년 2월 7일
0

교육

목록 보기
20/41

Writer / Reader

public class Test229 {
	public static void main( String[] args ) throws IOException {
		Writer out = new FileWriter("C:\\...\\a.txt");	
		out.write('한');	//	1 char 전송 - 안깨짐
		out.close();
		//
		Reader in = new FileReader("C:\\...\\a.txt");
		int r = in.read();
		in.close();
		System.out.println( (char)r ); // 캐스팅 필요
	}
}

InputStream / OutputStream : byte 단위 전송
Writer / Reader : 1char 전송( 한문자 전송 )

char 는 2byte!!

public class Test230 {
	public static void main( String[] args ) throws IOException {
		/*
			가장 많이 쓰이는 실전 예외처리의 전형
			에러가 나면 > 그에 대한 처치는 반드시 하고 > 그 사실을 다시 던져서 알린다.
		*/
		Writer out = null;
		try {
			out = new FileWriter("C:\\...\\a.txt");	
			out.write('한');
		}
		catch( IOException e ) {
			throw e;	
		}
		finally {
			if( out != null ) {
				out.close();
			}
			System.out.println("finally");			
		}
		//	암기사항 
		Reader in = null;
		try {
			in = new FileReader("C:\\...\\a.txt");
			int r = in.read();
			System.out.println( (char)r );
		}
		catch( IOException e ) {
			throw e;
		}
		finally {
			if( in != null ) {
				in.close();
			}
		}
	}
}

write / read 할때 에러가 나도 close() 는 반드시 호출되어야 한다.
finally 는 에러가 나건 정상 작동을 하건 무조건 실행되기 때문에 finally 에서 close() 해준다.


PrintWriter / BufferedReader

public class Test232 {
	public static void main( String[] args ) throws IOException {
		PrintWriter out = new PrintWriter( new FileWriter("C:\\...\\b.txt") );
		out.println( "apple" );
		out.println( "banana" );
		out.println( "orange" );
		out.println( "kiwi" );
		out.close();
		//
		BufferedReader in = new BufferedReader( new FileReader("C:\\...\\b.txt") );
		String l = in.readLine();
		in.close();
		System.out.println( l );
	}
}

PrintWriter::println() -> 문자열을 통째로 내보내고 줄을 바꾸어 준다.
BufferedReader::readLine() -> 줄 바꿈 표시까지의 한 줄을 읽어서 String 으로 리턴, 더 읽을게 없으면 null 리턴

String l = null;
while( ( l = in.readLine() ) != null ) {
	out.println( l );
}

OutputStreamWriter / InputStreamReader

public class Test234 {
	public static void main( String[] args ) throws IOException {
    	// char 출력을 byte 출력으로( 1char -> 2byte )
		Writer out = new OutputStreamWriter( new FileOutputStream("C:\\...\\c.txt") );
		out.write('한'); // 1char 내보낸다.
		out.close();
        // byte 단위 입력을 char 단위 입력으로 바꾸어 read
		Reader in = new InputStreamReader( new FileInputStream("C:\\...\\c.txt") );
		char r = (char)in.read();
		in.close();
		System.out.println( r );
	}
}

InputStreamReader( InputStream in )
OutputStreamWriter( OutputStream out )
'Writer 의 자손인데 생성자에 OutputStream ?? '

OutputStreamWriter : char 출력을 byte 출력으로 바꿔준다.
InputStreamReader : byte 단위 입력을 char 단위 입력으로 바꿔준다.

0개의 댓글