#027. FileInputStream / FileOutputStream 알아보기...
1. File Input/Output Stream 은 파일을 다루기 위한 스트림이다.
2. 테스트를 위해 io 패키지에 FileStreamDemo 클래스를 만들어 작성해보자.
1) 아래 예제는 FileInputStream 으로 내용을 가져와 출력하는 모습이다.
코드 | package io; import java.io.*; public class FileStreamDemo { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("C:/Hello.java"); int value = 0; while ( (value=fis.read()) != -1){ System.out.print((char)value); } } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } } } |
결과 | package studypack; public class Hello { public static void main(String[] args) { System.out.println("Hello, Java World!!"); } } |
설명 | 문장6: FileInputStream 클래스로 fis 객체를 생성한다. 생성자로 파일을 지정했다. 문장8: fis.read(); 는 1Byte를 가져오고, 가져온 1Byte 의 값을 ascii 값으로 반환한다. 또한, 더이상 없다면, -1 을 반환 한다. (value=fis.read()) != -1 이 부분에서 먼저 value=fis.read(); 를 계산한 후 value != -1 조건을 비교한다. 문장9: 반환 받은 value 는 ascii 값이므로 char 타입으로 형 변환 후 문자를 출력한다. 문장13: FileInputStream 은 IOException 을 try 해줘야 한다. |
2) 아래 예제는 URL 클래스를 이용해 InputStream 의 내용을 가져와 출력하는 모습이다.
코드 | package io; import java.io.*; import java.net.URL; public class FileStreamDemo { public static void main(String[] args) { try { //FileInputStream fis = new FileInputStream("C:/Hello.java"); URL url = new URL("http://download.oracle.com/javase/6/docs/api/overview-summary.html"); InputStream fis = url.openStream(); int value = 0; while ( (value=fis.read()) != -1){ System.out.print((char)value); } } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e.getMessage()); } } } |
결과 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!--NewPage--> <HTML> <HEAD> ... 중 략 ... </noscript> </BODY> </HTML> |
설명 | 문장3: URL 클래스를 사용하려면, java.net.URL 을 import 해야 한다. 문장8: URL 클래스로 url 객체를 생성하고, 생성자에 URL 주소를 넣어줬다. 문장9: ul.openStream(); 메서드를 통해 반환 타입인 InputStrem 클래스의 객체 fis 를 생성했다. 그 아래 내용은 동일하다. |
3) 아래 예제는 FileInputStream 으로 내용을 가져와 FileOutputStream 으로 출력(파일복사)하는 모습이다.
코드 | package io; import java.io.*; public class FileStreamDemo { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("C:/Hello.java"); FileOutputStream fos = new FileOutputStream("C:/HelloCopy.java");
byte[] buf = new byte[1024]; int count = 0;
while ( (count = fis.read(buf) ) != -1) { fos.write(buf, 0, count); } fos.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } } |
설명 | 문장7: FileOutputStream 클래스로 fos 객체를 생성하고, 생성자로 파일을 지정했다. 문장9: 버퍼를 이용하기 위해 byte 배열을 만들었다. 문장12: 버퍼가 없을 때는 fis.read(); 로 1Byte 씩 내용을 가져왔었다. 속도차원에서도 비효율적이며, 많은 반복을 하게 될 것이다. 그래서 문장9 에서 만든 byte 배열 buf 를 이용해 배열의 크기 만큼 내용을 읽어오게 된다. 즉 1024 byte 를 가져오게 된다. 반환 값은 가져온 개수를 반환한다. 문장13: fos.write(); 메서드는 지정된 파일에 내용을 기록한다. 그 중 파라메터는 buf 의 배열의 내용 중 0 번째부터 count 개수 만큼의 내용을 기록하라는 의미이다. 위 예제는 반복문으로 처음부터 끝까지 내용을 fis 로 기록하기 때문에 같은 파일이 생성될 것이다. |
지금까지 OOP 에 대해서 알아봤다.
잡담. 도움이 됐을지 모르겠군요^^; 모두 고생하셨습니다. ^______^ 화이팅 ^^"
'Developer > Java-oop' 카테고리의 다른 글
#026. I/O Stream 알아보기... (0) | 2011.04.14 |
---|---|
#025. Exception (예외처리) 알아보기... (0) | 2011.04.14 |
#024. Interface Iterator<E> 알아보기... (0) | 2011.04.12 |
#023. Collection HashMap<K,V> 알아보기... (0) | 2011.04.11 |
#022. Collection ArrayList<E> 알아보기... (0) | 2011.04.10 |