■ IO ( 입출력 ( 입력 / 출력 ( Input / Output ) ) )
1. 스트림 ( Stream )
1) 데이터의 흐름
2) Data Source → 데이터의 흐름 → Data Destination
3) 표준 입력 / 표준 출력
두뇌 → 키보드 ──→ 모니터 → 눈 → 두뇌
( System.in ) ( System.out )
4) 특징
(1) FIFO ( First In First Out )
흘러가는 데이터의 순서는 바뀔 수 없다.
(2) 단방향
흐름의 방향은 바뀔 수 없다.
(3) 지연성
스트림은 지연될 수 있다.
(4) 유연성
다른 스트림과 연결해서 사용할 수 있다.
ex) new BufferedReader(new InputStreamReader(System.in));
(5) 구분
a. 전송 단위
ㄱ. byte 스트림 ( 바이트 )
ex) XXX InputStream , XXX OutputStream
ㄴ. char 스트림 ( 문자 )
ex) XXX Reader , XXX Writer
b. 입출력
ㄱ. 입력 : XXX InputStream , XXX Reader
ㄴ. 출력 : XXX OutputStream , XXX Writer
c. 특성
ㄱ. Node Stream ( 근본 )
Data Source 또는 Data Destination 과 직접적으로 연결된 스트림을 말한다.
ex) System.in , System.out , FileInputStream , FileOutputStream , ......
ㄴ. Bridge Stream ( 다리 )
byte 스트림을 char 스트림으로 변경 해주는 스트림을 말한다.
ex) InputStreamReader , OutputStreamWriter , .....
ㄷ. Filter Stream ( 목적 )
목적에 맞게끔 가공된 스트림을 말한다.
BufferedReader , PrintWriter , ....
2. Node Stream
1) 근원지나 목적지에 직접 연결된 스트림을 말한다.
2) 종류 ( 주요 클래스 )
(1) InputStream
(2) 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 | import java.io.*; class IOS1{ // I(input)O(output) Study 1 InputStream is; OutputStream os; IOS1(){ is = System.in; os = System.out; } void use1(){ // 입력한 값을 아스키코드 번호를 알려준다. try{ // ex) A = 65 , a = 97 int i = 0; while((i=is.read()) != -1){ if(i == 13) break; System.out.println(" i : " + i); } }catch(IOException ioe){ }finally{ try{ if(is != null) is.close(); if(os != null) os.close(); }catch(IOException ioe){} } } public static void main(String[] args){ IOS1 ios1 = new IOS1(); ios1.use1(); } } | cs |
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 | import java.io.*; class IOS1{ // I(input)O(output) Study 1 InputStream is; OutputStream os; IOS1(){ is = System.in; os = System.out; } void use2(){ byte bs[] = new byte[8]; try{ int i = 0; while((i = is.read(bs)) != -1){ os.write(bs , 0 , i); os.flush(); } }catch(IOException ioe){ }finally{ try{ if(is != null) is.close(); if(os != null) os.close(); }catch(IOException ioe){} } } public static void main(String[] args){ IOS1 ios1 = new IOS1(); ios1.use2(); } } | cs |
(3) FileInputStream
(4) FileOutputStream
1) 파일의 내용을 cmd 창에 출력하기
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 | import java.io.*; class IOS2{ String fName1 = "C:\\Users\\user\\Desktop\\CIVIC\\IO\\hello.txt"; FileInputStream fis; // 파일 입력 OutputStream os = System.out; // 모니터 FileOutputStream fos; // 파일 출력 String fName2 = "Name.txt"; IOS2(){ try{ fis = new FileInputStream(fName1); fos = new FileOutputStream(fName2); }catch(FileNotFoundException fnfe){} } void use1(){ // 메모장 파일의 내용을 cmd 창에서 보여주는 메소드 byte bs[] = new byte[8]; try{ int i = 0; while((i = fis.read(bs)) != -1){ os.write(bs , 0 , i); } os.flush(); }catch(IOException ioe){ }finally{ try{ if(fis != null) fis.close(); if(os != null) os.close(); }catch(IOException ioe){} } } public static void main(String[] args){ IOS2 ios2 = new IOS2(); ios2.use1(); } } | cs |
2) 파일을 복사 하기
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 | import java.io.*; class IOS2{ String fName1 = "C:\\Users\\user\\Desktop\\CIVIC\\IO\\hello.txt"; FileInputStream fis; // 파일 입력 OutputStream os = System.out; // 모니터 FileOutputStream fos; // 파일 출력 String fName2 = "Name.txt"; IOS2(){ try{ fis = new FileInputStream(fName1); fos = new FileOutputStream(fName2); }catch(FileNotFoundException fnfe){} } void use2(){ // 메모장 파일을 복사하는 메소드 byte bs[] = new byte[8]; try{ int i = 0; while((i = fis.read(bs)) != -1){ fos.write(bs , 0 , i); } fos.flush(); System.out.println("복사 완료(" + fName2 + ")"); }catch(IOException ioe){ }finally{ try{ if(fis != null) fis.close(); if(fos != null) fos.close(); }catch(IOException ioe){} } } public static void main(String[] args){ IOS2 ios2 = new IOS2(); ios2.use2(); } } | cs |
1) cmd 에서 입력 받은 문자를 메모장 파일로 저장
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 | import java.io.*; class IOS3{ InputStream is = System.in; FileOutputStream fos; String fName = "결과.txt"; IOS3(){ try{ fos = new FileOutputStream(fName); }catch(FileNotFoundException fnfe){} } void use(){ byte bs[] = new byte[8]; try{ int i = 0; while((i = is.read(bs)) != -1){ fos.write(bs , 0 , i); } fos.flush(); }catch(IOException ioe){ }finally{ try{ if(is != null) is.close(); if(fos != null) fos.close(); }catch(IOException ioe){} } } public static void main(String[] args){ IOS3 ios3 = new IOS3(); ios3.use(); } } | cs |
1) 파일 복사
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 | import java.io.*; class IOS4{ String fName1 = "C:\\Users\\user\\Desktop\\CIVIC\\goodwarriors.mpeg"; // 복사하고 싶은 파일 이름 String fName2 = "결과.mpeg"; // 복사가 완료된 파일 이름 FileInputStream fis; FileOutputStream fos; IOS4(){ try{ fis = new FileInputStream(fName1); fos = new FileOutputStream(fName2); }catch(FileNotFoundException fnfe){} } void use(){ byte bs[] = new byte[1024]; try{ int i = 0; long size = 0L; while((i = fis.read(bs)) != -1){ fos.write(bs , 0 , i); System.out.println("전송 : " + (size += i) + "bytes"); } fos.flush(); System.out.println(fName2 + " 복사 완료 ( " + size + "bytes )"); }catch(IOException ioe){ }finally{ try{ if(fis != null) fis.close(); if(fos != null) fos.close(); }catch(IOException ioe){} } } public static void main(String[] args){ IOS4 ios4 = new IOS4(); ios4.use(); } } | cs |
(5) Reader
(6) Writer
cmd 에 입력한 값을 메모장.txt 에 저장하는 입력
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 | import java.io.*; class RWS{ // Reader Writer Study String fName = "메모장.txt"; Reader r; Writer w; RWS(){ InputStream is = System.in; r = new InputStreamReader(is); try{ w = new FileWriter(fName , true); // false 는 덮어쓰기 이다. }catch(IOException ioe){} } void use(){ char cs[] = new char[8]; try{ int i = 0; while((i = r.read(cs)) != -1){ w.write(cs , 0 , i); } w.flush(); System.out.println("쓰기 완료"); }catch(IOException ioe){} } public static void main(String[] args){ RWS rws = new RWS(); rws.use(); } } | cs |
(7) FileReader
(8) FileWriter
위의 예제 메모장.txt 에 저장된 내용 들을 cmd 창에 출력
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 | import java.io.*; class FRWS{ // File Reader Writer Strudy String fName = "메모장.txt"; // 위의 예제에서 만들었던 파일을 읽어보겠다. FileReader fr; OutputStream os = System.out; OutputStreamWriter osw; FRWS(){ try{ fr = new FileReader(fName); }catch(FileNotFoundException fnfe){} osw = new OutputStreamWriter(os); } void use(){ char cs[] = new char[8]; try{ int i = 0; while((i = fr.read(cs)) != -1){ osw.write(cs , 0 , i); } osw.flush(); }catch(IOException ioe){ }finally{ try{ fr.close(); osw.close(); }catch(IOException ioe){} } } public static void main(String[] args){ FRWS frws = new FRWS(); frws.use(); } } | cs |
3. Bridge Stream
1) 바이트 스트림을 문자 스트림으로 변경해 주는 스트림을 말한다.
2) 종류 ( 주요 클래스 )
(1) InputStreamReader
(2) OutputStreamWriter
4. Filter Stream
1) 해당 목적에 맞게 가공된 스트림을 말한다.
2) 종류 ( 주요 클래스 )
(1) BufferedInputStream
(2) BufferedOutputStream
입력 출력
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 | import java.io.*; class BIOS{ // Buffered Input Output Study InputStream is; OutputStream os; BufferedInputStream bis; BufferedOutputStream bos; BIOS(){ is = System.in; bis = new BufferedInputStream(is , 1024); os = System.out; bos = new BufferedOutputStream(os , 1024); } void use(){ byte bs[] = new byte[256]; try{ int i = 0; while((i = bis.read(bs)) != -1){ bos.write(bs , 0 , i); bos.flush(); } }catch(IOException ioe){ }finally{ try{ if(bis != null) bis.close(); if(bos != null) bos.close(); if(is != null) is.close(); if(os != null) os.close(); }catch(IOException ioe){} } } public static void main(String[] args){ BIOS bios = new BIOS(); bios.use(); } } | cs |
(3) BufferedReader
(4) PrintWriter
cmd 입력 내용을 메모장으로 저장
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 | import java.io.*; class PWS{ // PrintWriter Study InputStream is; Reader r; BufferedReader br; FileWriter fw; PrintWriter pw; PWS(){ is = System.in; // 키보드 r = new InputStreamReader(is); br = new BufferedReader(r); try{ fw = new FileWriter("PWS 결과.txt"); }catch(IOException ioe){} pw = new PrintWriter(fw , true); } void use(){ try{ String msg = ""; while((msg = br.readLine()) != null){ pw.println(msg); } }catch(IOException ioe){ }finally{ try{ if(pw != null) pw.close(); if(fw != null) fw.close(); if(br != null) br.close(); if(r != null) r.close(); if(is != null) is.close(); }catch(IOException ioe){} } } public static void main(String[] args){ PWS pws = new PWS(); pws.use(); } } | cs |
(5) DataInputStream
(6) DataOutputStream
5. Scanner
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 | import java.util.*; import java.io.*; class ScannerS{ // Scanner Study Scanner scanner; ScannerS(){ InputStream is = System.in; scanner = new Scanner(is); } void readTest(){ System.out.print("숫자 입력 : "); try{ int i = scanner.nextInt(); System.out.println("i : " + i); }catch(InputMismatchException ime){ System.out.println("숫자를 입력해 주세요."); } } void readString(){ System.out.print("문자 입력 : "); String msg = scanner.next(); System.out.println("msg : " + msg); } public static void main(String[] args){ ScannerS ss = new ScannerS(); ss.readTest(); ss.readString(); } } | cs |
6. 파일 삭제
파일 삭제 | import java.io.*; class DS{ // Delete Study String fName = "결과.mpeg"; // 위의 예제에서 동영상 파일을 삭제할 것이다. DS(){ File f = new File(fName); f.delete(); System.out.println("파일 (" + fName + ") 삭제 완료!"); } public static void main(String[] args){ new DS(); } } | cs |
7. 메인 메소드에서 import java.io.*; 안하고 이용하는 방법
| class InputS{ // Input Study public static void main(String[] args){ if(args.length != 3){ System.out.println("사용 방법 >> java inputS 입력1 입력2 입력3"); }else{ System.out.println(args[0]); System.out.println(args[1]); System.out.println(args[2]); } } } | cs |