자바I/O 자바의 I/O 예제 [1]

황제낙엽 2006.12.28 14:20 조회 수 : 2018 추천:161

http://www.ezslookingaround.com/blog/tech/?no=531



OutputStream / InputStream : 이들은 추상 클래스로서 바이트 스트림의 입출력을 위한...

                                           |--- FileInputStream       |-- BufferedInputStream
            |---- InputStream ---|--- FilterInputStream ---|
            |                             |--- ObjectInputStream    |-- DataInputStream
            |
Object --
            |
            |                               |--- FileOutputStream      |-- BufferedOutputStream
            |---- OutputStream---|--- FilterOutputStream---|-- DataOutputStream
                                            |--- ObjectOutputStream   |-- PrintStream

: 사실 이게 더 이해하기 쉬울것이다.. 왜냐? InputStream / OutputStream 앞에 prefix를 붙이는것에 따라 구분되므로
더 간단한 형태이지... 편리하기는 Reader / Writer 가 어떤면에선 더 편할 수도 있다.
아무튼 OutputStream 등은.. 스트림바이트의 출력..  Binary data.. byte 단위의 이진데이터이다... (눈으로 확인못한다; )

아웃풋 인풋 의 의미는 아웃풋 류의 클래스는 모두 출력개념(파일출력..등..) 이고 인풋은.. 파일에서부터 입력받은.. 개념이다.


1. FileOutputStream / FileInputStream

: 파일에 바이트 스트림을 출력하고, 바이트 스트림 파일을 읽는 기능
파일로 아웃풋 하겠다... 파일에서 인풋하겠다..
참고로.. 이녀석들은 스트림단위라소 눈에 보이지 않는 문자다;;

[yakmo@fedora java]$ java FileOutputStreamDemo 1111
0
1
2
3
4

지정한 화일명으로 ByteStreamFile을 생성하였습니다.
[yakmo@fedora java]$ cat 1111
[yakmo@fedora java]$ java FileInputStreamDemo 1111
01234지정한 파일로부터 바이트 스트림을 입력받아 화면에 출력하였습니다.
[yakmo@fedora java]$

[yakmo@fedora java]$ cat FileOutputStreamDemo.java
·미리보기 | 소스복사·
  1. import java.io.*;   
  2.   
  3. class FileOutputStreamDemo {   
  4.     public static void main(String args[]) throws IOException {   
  5.                 FileOutputStream fos = new FileOutputStream(args[0]);   
  6.   
  7.                 for(int i=0;i<5;i++) {   
  8.                         fos.write(i);                // write 는 byte  or  int ...   
  9.                         System.out.println(i);   
  10.                 }   
  11.                 fos.close();   
  12.                 System.out.println("지정한 화일명으로 ByteStreamFile을 생성하였습니다.");   
  13.         }   
  14. }  
[yakmo@fedora java]$ cat FileInputStreamDemo.java

·미리보기 | 소스복사·
  1. import java.io.*;   
  2.   
  3. class FileInputStreamDemo {   
  4.     public static void main(String args[]) throws IOException {   
  5.                 FileInputStream fis = new FileInputStream(args[0]);   
  6.                 int i;   
  7.   
  8.                 while( (i=fis.read() ) != -1) {   
  9.                         System.out.print(i);   
  10.                 }   
  11.                 System.out.println("지정한 파일로부터 바이트 스트림을 입력받아 화면에 출력하였습니다.");   
  12.   
  13.                 fis.close();   
  14.         }   
  15.   
  16. }  
[yakmo@fedora java]$


2. DataOutputStream / DataInputStream (자바기본 데이터를 스트림으로 아웃풋하겠다! / 스트림을 입력받아 자바기본데이터형으로읽겠다)

: 자바의 기본 자료형 데이터를 바이트 스트림으로 출력하는 기능을 제공 ( character --> bin )
즉, 자바기본 데이터를 인풋 받아 스트림으로 아웃풋한다는 의미   (데이터를 스트림으로 아웃풋 하겠다!)
/ Input.. 은 반대로 스트림을 읽어서 자바의 기본자료형으로 입력받는 기능..( bin --> character )

이렇게하면 다양한 데이터 형태가 가능해진다!!!



[yakmo@fedora java]$ java DataOutputStreamDemo
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at DataOutputStreamDemo.main(DataOutputStreamDemo.java:5)
[yakmo@fedora java]$ java DataOutputStreamDemo dos
[yakmo@fedora java]$ java DataInputStreamDemo dos
false
127
김
1.7976931348623157E308
[yakmo@fedora java]$


·미리보기 | 소스복사·
  1. import java.io.*;   
  2.   
  3. class DataOutputStreamDemo  {   
  4.     public static void main(String args[]) throws IOException {   
  5.                 FileOutputStream fos = new FileOutputStream(args[0]);        // 우선 bin 으로 파일을쓸 클래스 객체생성   
  6.                 DataOutputStream dos = new DataOutputStream(fos);                // 위의 객체에 자바의일반데이터를 바이너리형태로 고쳐서 넣을 dos 생성, 물론 fos.write(xx) 도 가능함.   
  7.                                                                                                                                 // 하지만 자바 기본데이터형으로 많은 종유의 지원이 가능하다.. write 는 byte or int 뿐이다.   
  8.   
  9.                 dos.writeBoolean(false);   
  10.                 dos.writeByte(Byte.MAX_VALUE);   
  11.                 dos.writeChar('김');   
  12.                 dos.writeDouble(Double.MAX_VALUE);   
  13.                 fos.close();   
  14.         }   
  15. }  



·미리보기 | 소스복사·
  1. import java.io.*;   
  2. class DataInputStreamDemo  {   
  3.     public static void main(String args[]) throws IOException {   
  4.                 FileInputStream fis = new FileInputStream(args[0]);                // bin 파일을 읽어들일 준비..   
  5.                 DataInputStream dis = new DataInputStream(fis);                        // bin을 읽어서 자바 데이터형태로 받을 dis 생성.. 물론 여기서도   
  6.                                                                                                        // 바로 fis.read 할 수 있긴하지만 데이터형이...;   
  7.   
  8.                 System.out.println(dis.readBoolean());   
  9.                 System.out.println(dis.readByte());   
  10.                 System.out.println(dis.readChar());   
  11.                 System.out.println(dis.readDouble());   
  12.   
  13.                 fis.close();   
  14.         }   
  15. }  


3. BufferedOutputStream / BufferedInputStream

BufferedOutputStream(OutputStream outputStream [,int bufSize])
버퍼를 사용하여 스트림을 출력 한다.


BufferedInputStream(InputStream inputstream [,int bufSize])
버퍼를 사용하여 스트림을 입력한다.
*/

[yakmo@fedora java]$ java BufferedOutputStreamDemo bos
버퍼를 사용하여 파일을 생성
[yakmo@fedora java]$ cat bos
[yakmo@fedora java]$ file bos
bos: raw G3 data, byte-padded
[yakmo@fedora java]$


[yakmo@fedora java]$ java BufferedInputStreamDemo bos
0
1
2
3
4
버퍼를 사용하여 파일로부터 입력
[yakmo@fedora java]$


·미리보기 | 소스복사·
  1. import java.io.*;   
  2.   
  3. class BufferedOutputStreamDemo {   
  4.     public static void main(String args[]) throws Exception {  //IOException 해도 되고...   
  5.                 FileOutputStream fos = new FileOutputStream(args[0]);   
  6.                 BufferedOutputStream bos = new BufferedOutputStream(fos);   
  7.   
  8.                 for(int i=0;i<5;i++) {    
  9.                         bos.write(i);   
  10.                 }   
  11.                 bos.close();   
  12.                 System.out.println("버퍼를 사용하여 파일을 생성");   
  13.         }   
  14. }  



·미리보기 | 소스복사·
  1. import java.io.*;   
  2.   
  3. class BufferedInputStreamDemo {   
  4.         public static void main(String args[]) throws Exception {   
  5.                 FileInputStream fis = new FileInputStream(args[0]);   
  6.                 BufferedInputStream bis = new BufferedInputStream(fis);   
  7.   
  8.                 int i;   
  9.                 while( (i=bis.read())!= -1 ) {   
  10.                         System.out.println(i);   
  11.                 }   
  12.                 System.out.println("버퍼를 사용하여 파일로부터 입력");   
  13.                 bis.close();   
  14.         }   
  15. } MORE   

번호 제목 글쓴이 날짜 조회 수
347 java.util.Optional 에서의 map() 함수의 이해 황제낙엽 2026.06.24 666
346 linux(ubuntu) 의 jdk 21 이 설정된 환경에서 jdk 17 로 다운그레이드 절차 황제낙엽 2025.09.22 1532
345 [ChatGPT] javax.* 패키지와 jakarta.* 패키지의 혼합 사용 방안 황제낙엽 2025.04.15 2459
344 [ChatGPT] *.servlet.http.HttpServlet 클래스를 사용할 수 있는 주요 WAS 목록 황제낙엽 2025.04.14 2038
343 [ChatGPT] JDBC API에서 java.sql과 javax.sql 패키지의 차이점 황제낙엽 2025.01.31 2218
342 jakarta.servlet 패키지를 이용한 File Upload 구현 (2024.03.03, Servlet 5.0) 황제낙엽 2025.01.02 2310
341 [ChatGPT] Java EE가 Jakarta EE로 전환 황제낙엽 2025.01.01 2525
340 [ChatGPT] File.delete() 함수로 파일 삭제가 되지 않는 경우 황제낙엽 2024.12.10 2809
339 [ChatGPT] <jsp:include>에서 flush="true"를 설정시의 몇 가지 문제점 과 대안 황제낙엽 2024.07.19 2493
338 [Copilot] JSP, Servlet, web.xml, mysql 한글 설정 황제낙엽 2024.07.12 2555
337 Base64 클래스의 encode, decode 에서 URL-safe 황제낙엽 2024.07.10 2624
336 [Copilot] JSP 에서 다른 페이지를 현재 페이지에 포함시키는 문법 (include) 황제낙엽 2024.06.26 2570
335 Exception 출력에 대한 고찰 황제낙엽 2024.06.10 2198
334 google-auth-library-oauth2-http 라이브러리 다운로드 황제낙엽 2023.11.19 4025
333 firebase-admin-java 라이브러리 다운로드 (firebase admin sdk library) 황제낙엽 2023.11.19 2805
332 Enum 활용 (개인블로그, Effective Java) file 황제낙엽 2023.11.02 2759
331 Enum 활용 (우아한기술블로그) file 황제낙엽 2023.11.02 2790
330 servlet name 에 camel case 를 사용해서는 안되는 이유 황제낙엽 2023.10.24 2508
329 org.apache.commons.fileupload.servlet.ServletFileUpload 이용 예시 황제낙엽 2023.08.25 3336
328 ServletFileUpload.parseRequest() 실행 결과 리스트가 비어있는 오류 황제낙엽 2023.08.25 2935