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() 해준다.
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 ); }
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 단위 입력으로 바꿔준다.