on
자바 I/O
자바 I/O
0. 자원을 사용하는 객체를 사용할 때 유의할 점
: InputStream, Connection 과 같이 자원을 사용하는 (==작업을 불러오는..그런느낌) 객체를 사용할 때에는
사용후에 close() 메서드로 꼭 작업을 끝내줘야 한다.
- close()로 작업을 종료하지 않으면 계속 작업요청을 실행하므로 다른 작업에 문제가 발생할 수 있기 때문이다.
- try-catch문 사용시, 예외발생유무에 상관없이 동작하는 finally문에 close()를 기재하면 된다
=> try-resource문을 사용하면 별도로 close() 처리를 하지않아도 자원반환을 자동으로 수행하므로
try-resource문을 활용할것!
I. INPUT - 데이터를 입력받는 5가지 방법
방법1. InputStream 객체를 사용하여 1바이트 단위 로 입력데이터를 처리하기
1) System.in을 사용하여 데이터를 입력받고 InputStream객체에 저장함
2) read() 호출하여 입력받은 데이터를 1바이트씩 읽어들인다 -> int형으로 저장된다.
3) 주의! int형으로 읽어들이므로 문자데이터는 별도로 형변환을 해야한다.
4) 다음바이트로 이동하기 위해 반복문 마지막에 read()를 한번 더 호출하여 다음에 접근할 데이터를 초기화해야한다.
System.out.println("데이터를 입력하세요"); try(InputStream iss = System.in) { int in = iss.read(); while(in!=-1) { System.out.println("입력 데이터를 문자로 변환: "+(char)in); in = iss.read(); } } catch (Exception e) { e.printStackTrace(); }
방법2. InputStream 객체 사용, 배열 을 이용해 한번에 여러 바이트를 모아서 데이터 처리하기
1) System.in을 사용하여 데이터를 입력받고 InputStream객체에 저장함
2) n의 크기를 갖는 byte배열을 생성함. byte[] bArr = new byte[n];
3) read() 호출하여 InputStream객체에 저장된 데이터를 읽어들이며, 이때 byte배열을 매개변수로 전달함.
-> 입력데이터를 배열의 크기만큼 한번에 저장하게된다.
4) 읽어들인 데이터는 int형으로 저장되므로 문자열데이터는 별도의 형변환처리가 필요하다.
System.out.println("데이터를 입력하세요"); try (InputStream is = System.in){ byte[] bArr = new byte[10];//10바이트 단위로 묶는 경우 int n = is.read(bArr); System.out.println("입력 데이터 크기: "+n+"바이트"); //for문을 사용하여 배열에 저장되어있는 입력값 출력하기 - 문자 하나씩 읽음 for (int i = 0; i < bArr.length; i++) { System.out.println("입력데이터: "+(char)bArr[i]); } // String 클래스를 활용하면 배열테이터를 문자열로 변환가능하다 - 문자열로 읽음 String str = new String(bArr); System.out.println("입력데이터: "+str); } catch (IOException e) { e.printStackTrace(); } //while문을 사용하는 경우 try(InputStream iss = System.in) { byte[] bArr = new byte[10]; int n = iss.read(bArr); while(n>0) { String str = new String(bArr); System.out.println("입력 데이터: "+str); n = iss.read(bArr); } } catch (Exception e) { e.printStackTrace(); }
단점!) 지정한 배열의 크기만큼의 데이터만 저장할 수 있으므로
배열크기보다 큰 데이터를 입력하면 데이터 소실이 발생함
방법3. InputStreamReader 객체를 사용하여 char단위 로 입력데이터를 처리
1) InputStram객체를 생성하고 데이터를 입력받아 저장함
2) InputStreamReader객체 생성 & 매개변수로 InputStream객체를 전달함.
3) InputStreamReader객체에 read()호출하여 데이터를 2바이트씩 읽어들임
4) int로 저장되므로 문자형의 경우 별도의 형변환이 필요함
System.out.println("데이터를 입력하세요"); try (InputStreamReader reader = new InputStreamReader(System.in)){ int data = reader.read(); while(data>0) { System.out.println((char)data); data = reader.read(); } } catch (Exception e) { e.printStackTrace(); }
방법4. InputStreamReader객체 를 이용, 배열 을 이용해 한번에 데이터 처리하기
System.out.println("데이터를 입력하세요"); try (InputStreamReader reader = new InputStreamReader(System.in)){ char[] cArr = new char[10]; int data = reader.read(cArr); while (data>0) { String str = new String(cArr); System.out.println("입력 문자열: "+str); data = reader.read(cArr); } } catch (Exception e) { e.printStackTrace(); }
방법5. BufferedReader 객체를 사용하여 String단위 로 입력데이터를 처리
1) InputStream객체를 매개변수로 전달 -> InputStreamReader객체를 매개변수로 전달 -> BufferedReader
2) BufferedReader객체에 readLine()호출하여 읽어온 데이터를 String형으로 저장
3) 출력하면 끝
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in))){ String str = buffer.readLine();//한줄씩 읽어와 String데이터로 저장함 while(str!=null) { System.out.println("입력 데이터: "+str); str = buffer.readLine();//초기화과정은 마찬가지로 필수! } } catch (IOException e) { e.printStackTrace(); }
II. OUPUT - 데이터를 출력하는 2가지 방법
from http://its-joho.tistory.com/121 by ccl(A) rewrite - 2021-11-14 13:02:20