IT 개발노트
JAVA 입출력(I/O) 알아보기 본문
1. 입출력(I/O)
1.1 입출력(I/O) 이란?
: I/O란 입력(Input)과 출력(Output)을 뜻한다. 컴퓨터한테 입력하는 것은 input이며, 컴퓨터가 어떤 것을 출력하는 것을 Output이라고 한다.
Input
- 파일 데이터를 '읽는다'
- 키보드의 데이터를 '읽는다'
- 네트워크상의 데이터를 '읽는다'
Output
- 파일에 데이터를 '쓴다'
- 모니터에 데이터를 '쓴다.(출력)'
- 네트워크상에 데이터를 '쓴다.(전송)'
1.2 JAVA 입출력 API(Input~, Output~)
- InputStream, OutputStream : 1byte 단위 (이미지, 동영상등의 데이터에 주로 사용)
- Reader, Writer : 2byte 단위 (문자열에 주로 사용)
1.2.1 InputStream 사용법
- InputStream (추상)클래스를 이용해서 객체를 만든다. 또는 다른 클래스의 메서드에서 반환(리턴)되는 타입 객체를 만든다.
- read()메서드를 이용해서 데이터를 읽는다.
- read(), read(byte[]) 두개의 메서드를 이용할 수 있다.
InputStream 객체
- read() : 1byte씩 읽는다. 속도가 느리다.
- read(byte[]) : Byte[] 만큼씩 읽는다. 속도가 빠르다.
예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | package sungju.Java.Test2; import java.io.FileInputStream; import java.io.InputStream;; public class Test2 { public static void main(String[] args) { try { InputStream is = new FileInputStream("C:\\javalec\\workspace\\jain.txt"); while(true) { int i = is.read(); System.out.println("데이터 : " + i); if(i==-1) break; } }catch(Exception e) { System.out.println(e.getMessage()); } } } |
1.2.2 OutputStream 사용법
- OutputStream 클래스를 이용해서 객체를 만든다. 또는 다른 클래스의 메서드에서 반환(리턴)되는 타입 객체를 얻는다.
- write()메서드를 이용해서 데이터를 읽으면 된다.
- write(), write(byte[]), write(byte[], int, int) 세개의 메서드를 이용할 수 있다.
- write(byte[], int, int)는 데이터를 원하는 위치에서 원하는 숫자만큼 쓸 수 있다.
1.3 예외 처리와 close() 실행
- I/O를 하면서 반듯이 해야하는 예외처리가 있다. IOException 이다.
- I/O 작업 마지막은 close()로 외부연결을 끝내야 한다.
예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package sungju.Java.Test2; import java.io.FileOutputStream; import java.io.OutputStream; public class Test2 { public static void main(String[] args) { OutputStream os = null; try { os = new FileOutputStream("C:\\javalec\\workspace\\jaout.txt"); String str = "오늘 날씨는 아주 좋습니다."; byte[] bs = str.getBytes(); os.write(bs); } catch(Exception e) { System.out.println(e.getMessage()); }finally { try { if(os != null) os.close(); } catch(Exception e2) { } } } } |
1.4 텍스트 읽고 쓰기
: 읽고, 쓰기를 동시에 - 파일복사
- 파일을 읽고, 다른 파일에 쓰고, 결국은 파일 복사이다.
- 작업순서 : InputStream, OutputStream 준비 -> InputStream으로 읽어들인 데이터를 OutputStream으로 쓴다 -> 외부연결 close()함
1.5 DataInputStream, DataOutputStream - 문자열 읽고, 쓰기
: byte단위로 문자열을 처리하는 InputStream, OutputStream 보다 편리하게 고안된 클래스이다.
예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package sungju.Java.Test2; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; public class Test2 { public static void main(String[] args) { InputStream is = null; DataInputStream dis = null; OutputStream os = null; DataOutputStream dos = null; try { is = new FileInputStream("C:\\javalec\\workspace\\str.txt"); dis = new DataInputStream(is); String str = dis.readUTF(); os = new FileOutputStream("C:\\javalec\\workspace\\str_copy.txt"); dos = new DataOutputStream(os); dos.writeUTF(str); } catch (Exception e) { } finally { if(dos != null) { try { dos.close(); } catch (Exception e2) { } } if(os != null) { try { os.close(); } catch(Exception e2) { } } } } } |