메모리에서 읽고,쓰기를 해봤지만 아무래도 가장 직관적이고 이해하기 쉬운 것은 파일에서

읽기,쓰기가 아닐까 합니다.  파일에서 읽고,쓰기를 하는데 사용하는 스트림은

FileReader,FileWriter,FileInputStream,FileOutputStream등이 있습니다.

 

import java.io.*;

import java.net.*;

 

/**

* InputStream중에서 파일에서 읽고,쓰기 하는 Stream의 기능을 보여줍니다.

*/

public class FileInputOutput {

 

    public void copy(InputStream is, OutputStream os) throws IOException {

        int c = 0;

        while((c = is.read()) != -1)

            os.write(c);

        os.flush();

    }

    public void copy(Reader r, Writer w) throws IOException {

           int c = 0;

           while((c = r.read()) != -1)

                         w.write(c);

           w.flush();

    }

   

    public static void main(String[] args) {

        try {

            FileInputOutput fio = new FileInputOutput();

            // URL 클래스를 이용해서 www.yahoo.com페이지를 InputStream으로 개방

            InputStream is = new URL("http://www.yahoo.com").openStream();

            OutputStream os = new FileOutputStream("yahoo.htm");

            fio.copy(is,os);

            Reader reader = new FileReader("yahoo.htm");

            Writer writer = new FileWriter("yahoo.html");

            fio.copy(reader,writer);

        }

        catch(IOException ie) {

            ie.printStackTrace();

        }

    }

}

예제 6 - 7 FileInputOutput.java

 

예제 6 - 7 FileInputOutput 클래스는 FileInputStream, FileOutputStream의 예를 보여줍니다.

FileInputOutput클래스는 copy메소드를 오버로딩했습니다. , 2가지 형태의 copy

있는데 메소드의 인자로 바이트스트림을 읽고,쓰는데 적당한 InputStream, OutputStream

캐릭터스트림을 읽고,쓰는데 적당한 Reader,Writer가 그것입니다.

FileInputOutput클래스의 copy메소드는 InputStream으로부터 데이터를 읽어서

OutputStream으로 쓰기를 하는데 메소드의 이름에서 알수 있듯이 데이터 내용을 복사하는

것입니다.

FileInputOutput public static void main(String[] ) 메소드에서는 야후의 홈페이지 내용을

읽어서 “yahoo.htm”이라는 파일로 저장합니다. 그리고 “yahoo.htm”이라는 파일을 읽어서

“yahoo.html” 이라는 파일로 복사합니다.

“yahoo.html”을 메모장으로 열어보면 www.yahoo.com의 홈페이지의 HTML 내용을

볼 수있고, 브라우저로 열어보면 www.yahoo.com의 홈페이지와 같은 내용을 볼수 있을

것입니다.

예제 6 - 7 FileInputOutput클래스에서 볼수 있듯이 FileInputOutput클래스는 InputStream

으로 읽고 OutputStream으로 쓴다는 것에 충실한 셈입니다.

InputStreamwww.yahoo.com 홈페이지의 URL로부터 만들어졌고,OutputStream

“yahoo.htm”이라는 이름을 가진 파일을 가리킨 셈이 됬으므로, 결국에는 www.yahoo.com

홈페이지의 내용이 "yahoo.htm"이라는 파일에 담겨진 셈이됩니다.

 

사용자 삽입 이미지

그림 6 - 6 [run FileInputOutput]

 

Posted by
,