63
12 장 . 장장장 1 public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 장 장장 장장장 장장장장장 System.out.println(" 장장장 장장 " + sum + " 장장장 "); } } JAVA

12 장 . 입출력

  • Upload
    talor

  • View
    50

  • Download
    0

Embed Size (px)

DESCRIPTION

12 장 . 입출력. Java. public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt (a1[0]); b = Integer.parseInt (a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println (" 두수의 합은 " + sum + " 입니다 "); } }. - PowerPoint PPT Presentation

Citation preview

Page 1: 12 장 .  입출력

12 장 . 입출력

1

public class SumTest { public static void main(String a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두 수를 더하는 부분입니다 System.out.println(" 두수의 합은 " + sum + " 입니다 "); }}

JAVA

Page 2: 12 장 .  입출력

자바 시스템에서의 입출력 개요를 학습한다 .

파일 , 디렉터리와 연관된 클래스를 학습한다 .

문자 스트림과 바이트 스트림 개요에 관해 학습한다 .

문자 스트림 관련 클래스에 관해 학습한다 . 문자 스트림을 통하여 파일에 입출력하는 방법을 학습한다 .

바이트 스트림 관련 클래스에 관해 학습한다 . 바이트 스트림을 통하여 파일에 입출력하는 방법과 객체를 입출력하는 방법에 관해 학습한다 .

학습목표

2

Page 3: 12 장 .  입출력

section 1 java.io 패키지 개요

section 2 파일과 디렉터리

section 3 문자 (Chraracter) 스트림과 바이트 (Byte) 스트림

section 4 문자 스트림 - 4-1 Writer 클래스와 Reader 클래스

- 4-2 FileWriter 클래스와 FileReader 클래스

section 5 바이트 스트림 - 5-1 OutputStream 클래스와 InputStream 클래스

- 5-2 FileOutputStream 클래스와 FileInputStream 클래스

- 5-3 DataOutputStream 클래스와 DataInputStream 클래스

- 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스

목차

3

Page 4: 12 장 .  입출력

12장 . 입출력

1 java.io 패키지 개요

4

입출력 기능- 프로그램에서 사용된 데이터를 영구적으로 저장하여 후에 다른 프로그램에서 사용하게 하기

위해 필요한 기능

- 프로그램에서 생성된 데이터를 파일 형태로 컴퓨터의 하드디스크나 보조 기억장치에 저장한 다음 다른 프로그램에서 이 데이터를 읽어 사용하는 기능

스트림- 순서가 있는 일련의 데이터를 의미하는 추상적인 개념

Page 5: 12 장 .  입출력

12장 . 입출력

1 java.io 패키지 개요

5

스트림을 통한 입출력의 예

395 page

Page 6: 12 장 .  입출력

12장 . 입출력

1 java.io 패키지 개요

6

java.io  패키지의 클래스 계층 구조

396 page

Page 7: 12 장 .  입출력

12장 . 입출력

2 파일과 디렉터리

7

File 클래스- 자바는 입출력을 위해 필요한 파일과 디렉터리를 다루기 위해 File 클래스를 제공

File 클래스의 생성자

File(String directoryPath)File(String directoryPath, String filename)File(File dirObj, String filename)

형식

File f1 = new File("/"); File f2 = new File("/", "autoexec.bat"); File f3 = new File(f1, "autoexec.bat");

파일의 경로만 가진 객체경로명과 파일 이름을 가진 객체경로명을 가진 File 객체와 파일 이름을 가진 객체

Page 8: 12 장 .  입출력

12장 . 입출력

2 파일과 디렉터리

8

File  클래스의 주요 메소드

메소드 설명boolean() 파일이 읽기 가능하면  true, 아니면  false를 반환

boolean canWrite() 파일이 쓰기 가능하면  true, 아니면  false를 반환

boolean delete()파일을 삭제하고  true를 반환 , 파일을 삭제할 수 없으면  false를 반환

boolean equals(Object obj)현재의 객체와  obj로 지정된 객체가 같은 파일을 가지고 있으면  true, 아니면  false를 반환

String getAbsolutePath() 파일에 대한 절대 경로를 반환

String getCanonicalPath() 파일에 대한 정규 경로를 반환

String getParent() 부모 디렉터리 이름을 반환

String getName() 파일의 이름을 반환

String getPath() 파일의 경로를 반환

boolean isAbsolute() 경로가 절대 경로이면  true, 아니면  false를 반환

boolean isDirectory() 현재의 객체가 디렉터리이면  true, 아니면  false를 반환

Page 9: 12 장 .  입출력

12장 . 입출력

2 파일과 디렉터리

9

File  클래스의 주요 메소드

메소드 설명

boolean isFile() 현재의 객체가 파일이면  true, 아니면  false를 반환

long lastModified()1970년  1월  1일 (GMT)부터 파일이 마지막으로 수정된 날짜까지의 시간을 밀리초로 반환

long length() 파일의 바이트 수를 반환

String[] list() 지정된 디렉터리에 있는 파일과 디렉터리를 문자열 배열로 반환

boolean mkdir()디렉터리를 생성 . 경로로 지정된 모든 부모 디렉터리가 존재하여야 한다 . 지정한 디렉터리가 생성되면  true를 반환하고 , 아니면 false를 반환

boolean mkdirs()디렉터리를 생성 . 경로로 지정된 디렉터리가 존재하지 않으면 생성한 다음 지정한 디렉터리를 생성 . 디렉터리가 생성되면  true

를 아니면  false를 반환

boolean renameTo(File newName)파일이나 디렉터리의 이름을   newName으로 변경한 다음  true

를 반환 . 이름을 변경하지 못하면  false를 반환

Page 10: 12 장 .  입출력

12장 . 입출력

2 파일과 디렉터리

10

실습예제FileDirTest1.java

0102030405060708091011121314151617

import java.io.File; public class FileDirTest1 { public static void main(String args[]) { String directory = "C:/Windows"; File f1 = new File(directory); if (f1.isDirectory()) {

System.out.println("검색 디렉터리  " + directory);

System.out.println("============================="); String s[] = f1.list(); for (int i=0; i < s.length; i++) { File f = new File(directory + "/" + s[i]); if (f.isDirectory())

System.out.println(s[i] + " : 디렉터리 ");

else

System.out.println(s[i] + " : 파일 ");

} }

“C:/Windows”를 경로로 File 객체 생성

디렉터리에 있는 모든 요소를 문자열 배열로 생성

각 요소를 File 객체로 생성디렉터리인지 , 파일인지를 판별

Page 11: 12 장 .  입출력

12장 . 입출력

2 파일과 디렉터리

11

실습예제

프로그램 설명- 05 : “C:/Windows”  디렉터리를 가지고 File  객체를 생성한다 .

- 09 : list()  메소드는 현재 File  객체가 가지고 있는 디렉터리의 모든 요소 ( 디렉터리 또는 파일 ) 들을 String  객체의 배열로 반환하는 메소드이다 .

- 11 : “C:/Windows”  디렉터리에 있는 각 요소들을 가지고 File  객체를 생성한다 . 

- 12 :  각 요소에 대해 디렉터리인지를 검사하여 출력한다 .

FileDirTest1.java

1819202122

else System.out.println

("지정한  " + directory + " 는 디렉터리가 아님 ");

}}

Page 12: 12 장 .  입출력

12장 . 입출력

2 파일과 디렉터리

12

Page 13: 12 장 .  입출력

12장 . 입출력

2 파일과 디렉터리

13

실습예제FileDirTest2.java

01020304050607080910111213141516171819

import java.io.File;public class FileDirTest2 { public static void main(String args[]) { File f1 = new File("C:/log.txt");

System.out.println("파일 이름  : " + f1.getName());

System.out.println("파일 경로  : " + f1.getPath());

System.out.println("절대 경로  : " + f1.getAbsolutePath());

System.out.println(f1.exists() ? "파일 존재 " : "파일 없음 ");

System.out.println(f1.canWrite() ? "수정가능 " : "수정 불가능 ");

System.out.println(f1.canRead() ? "읽기가능 " : "읽기 불가능 ");

System.out.println(f1.isDirectory() ? "디렉터리 " : "디렉터리아님 ");

System.out.println(f1.isFile() ? "파일 " : "파일 아님 ");

System.out.println(f1.isAbsolute() ? "절대 경로 " : "상대 경로 "); System.out.println

("1970년  1월  1일부터 파일이 마지막 수정된 날짜까지의 밀리초  : " + f1.lastModifed());

System.out.println("파일의 크기  : " + f1.length() + " Bytes"); }}

“C:/log.txt”로 File 객체 생성파일의 이름을 출력

Page 14: 12 장 .  입출력

12장 . 입출력

2 파일과 디렉터리

14

프로그램 설명- 04 : “C:/log.txt” 로 File  객체를 생성하였다 .

- 05~17 : File  클래스의 다양한 메소드를 사용하고 있다 . lastModified()  메소드는 파일이 마지막으로 수정된 날짜를 밀리초로 반환한다 .  반환된 밀리초는 1970 년 1 월 1 일부터 파일이 마지막으로 수정된 날짜까지의 밀리초이다 .

Page 15: 12 장 .  입출력

12장 . 입출력

3 문자 (Chraracter) 스트림과 바이트 (Byte) 스트림

15

문자 스트림- 16 비트 문자나 문자열들을 읽고 쓰기 위한 스트림

- 입출력을 위해서는 Reader, Writer 클래스와 그 하위 클래스를 이용

바이트 스트림 ( 또는 바이너리 스트림 )- 8 비트의 바이트를 읽고 쓰기 위한 스트림

- 입출력을 위해서는 InputStream, OutputStream 클래스와 그 하위 클래스를 이용

Page 16: 12 장 .  입출력

12장 . 입출력

4 문자 스트림

16

문자 스트림과 연관된 클래스

403 page

Page 17: 12 장 .  입출력

12장 . 입출력

4-1 Writer 클래스와 Reader 클래스4 문자 스트림

17

Writer 클래스- 문자 스트림의 출력 기능을 제공

Reader 클래스- 문자 스트림의 입력 기능을 제공

Page 18: 12 장 .  입출력

12장 . 입출력

4-1 Writer 클래스와 Reader 클래스4 문자 스트림

18

Writer  클래스의 주요 메소드

메소드 설명void close( ) 출력 스트림을 닫는다 .

void flush( ) 출력 버퍼에 저장된 모든 데이터를 출력 장치로 전송

void write(int c) c의 하위  16비트를 스트림으로 출력

void write(char buffer[ ]) buffer 배열에 있는 문자들을 스트림으로 출력

void write(char buffer[ ], int index, int size)buffer 배열의  index 위치부터  size 크기만큼의 문자들을 스트림으로 출력

void write(String s) 문자열  s를 스트림으로 출력

void write(String s, int index, int size)문자열의  index 위치부터  size 크기만큼의 문자들을 스트림으로 출력

Page 19: 12 장 .  입출력

12장 . 입출력

4-1 Writer 클래스와 Reader 클래스4 문자 스트림

19

Reader  클래스의 주요 메소드

메소드 설명void close( ) 입력 스트림을 닫는다 .

int read( )다음 문자를 읽어 반환한다 . 입력 스트림에 읽을 문자가 없으면 대기한다 . 읽은 문자가 파일의 끝이면  -1을 반환

int read(char buffer[ ])입력  스트림으로부터   buffer  배열  크기만큼의  문자를  읽어 buf-

fer에 저장int read(char buffer[ ], int offset, int num-Chars)

입력 스트림으로부터  numChars에 지정한 만큼의 문자를 읽어 buffer의  offset 위치에 저장하고 읽은 문자의 개수를 반환

void mark(int numChars) 입력 스트림의 현재의 위치에 mark 한다 .

boolean markSupported( ) 현재의 입력 스트림이 mark()와  reset()을 지원하면  true를 반환

boolean ready( )다음  read()문을 수행할 수 있으면  true, 입력 스트림이 없어 기다려야 되는 경우에는  false를 반환

void reset( )입력 스트림의 입력 시작 부분을 현재의 위치에서 가장 가까운 이전의 mark 위치로 설정

int skip(long numChars)numChars로 지정된 문자 수만큼을 스킵하고 스킵된 문자의수를 반환

Page 20: 12 장 .  입출력

12장 . 입출력

4-1 Writer 클래스와 Reader 클래스4 문자 스트림

20

[ 예외를 호출한 메소드로 넘겨주는 방법 ]

public static void main(String args[]) throws IOException { .......... FileWriter fw = new FileWriter(args[0]); ............ fw.write("Line " + i + "\n"); ........... fw.close();}

호출한 메소드에예외를 넘김

Page 21: 12 장 .  입출력

12장 . 입출력

4-1 Writer 클래스와 Reader 클래스4 문자 스트림

21

[ 예외를 메소드 내에서 처리하는 방법 ]

public static void main(String args[]) { ............ try { FileWriter fw = new FileWriter(args[0]); ............ fw.write("Line " + i + "\n"); ........... fw.close(); } catch(IOException e) { System.our.println("Exception: " + e); } ..........}

예외 발생 가능 영역 지정

예외 처리 루틴 작성

Page 22: 12 장 .  입출력

12장 . 입출력

4-2 FileWriter 클래스와 FileReader 클래스4 문자 스트림

22

FileWriter 클래스- OutputStreamWriter 클래스로부터 상속된 클래스

FileWriter 클래스의 생성자

FileReader 클래스의 생성자

FileWriter(String filepath) throws IOExceptionFileWriter(String filepath, boolean append) throws IOExceptionFileWriter(File fileObj) throws IOException

형식

FileReader(String filepath)FileReader(File fileObj)

형식

Page 23: 12 장 .  입출력

12장 . 입출력

4-2 FileWriter 클래스와 FileReader 클래스4 문자 스트림

23

FileWriter  클래스와 FileReader  클래스의 역할

406 page

Page 24: 12 장 .  입출력

12장 . 입출력

4-2 FileWriter 클래스와 FileReader 클래스4 문자 스트림

24

실습예제

FileWriterTest.java

0102030405060708091011121314

import java.io.*;public class FileWriterTest { public static void main(String args[]) throws Exception

String source = "비어있어야 비로서 가득해 지는 사랑 \n" +

" 영원히 사랑한다는 것은 \n" +

" 평온한 마음으로 아침을 맞는다는 것입니다 .\n";

char input[] = new char[source.length()]; source.getChars(0, source.length(), input, 0); FileWriter fw = new FileWriter(args[0]); fw.write(input); fw.close(); }}

예외를 처리

출력할 문자열 길이만큼의 문자 배열 생성문자열을 문자 배열로 변환

FileWriter 객체 생성객체를 통해 문자 배열 내용 출력

파일을 닫는다 .

Page 25: 12 장 .  입출력

12장 . 입출력

4-2 FileWriter 클래스와 FileReader 클래스4 문자 스트림

25

프로그램 설명- 03 : throws  절을 이용하여 예외를 처리하였다 .  파일을 생성하고 입출력을 수행하기

위해서는 반드시 예외를 처리해 주어야 한다 .  예를 들어 출력할 파일을 생성할 수 없다거나 , 

입력할 파일이 존재하지 않는 경우를 대비하기 위해서이다 .

- 07 :  출력할 문자열 source  크기에 해당하는 문자 배열 input 을 생성하였다 . 

- 08 : getChars()  메소드는 String  클래스에 선언된 메소드이다 .  문자열을 문자 배열로 변환하는 메소드이다 . 

- 10 : FileWriter  객체를 생성하고 있다 .  매개변수로 받은 파일 이름으로 파일을 생성한다 .

- 11 :  파일에 input  문자 배열을 출력하고 있다 . write()  메소드는 오버로딩되어 사용된다 . 

문자열 source 를 직접 write()  메소드를 이용하여 출력할 수도 있다 .  즉 5,6 번 문장을 삭제하고 fw.write(source) 를 이용하여 문자열을 직접 출력할 수 있다 .

- 12 :  파일을 닫는다 .  즉 출력 스트림을 닫는다 .

Page 26: 12 장 .  입출력

12장 . 입출력

4-2 FileWriter 클래스와 FileReader 클래스4 문자 스트림

26

실습예제

FileReaderTest.java

0102030405060708091011

import java.io.*;class FileReaderTest { public static void main(String args[]) throws Exception { FileReader fr = new FileReader(args[0]); int i; while((i = fr.read()) != -1 ) { System.out.print((char)i); } fr.close(); }}

FileReader 객체를 생성

파일로부터 하나의 문자를 읽는다

문자로 형변환하여 출력 

Page 27: 12 장 .  입출력

12장 . 입출력

4-2 FileWriter 클래스와 FileReader 클래스4 문자 스트림

27

프로그램 설명- 04 : FileReader  클래스로부터 객체를 생성한다 .  실행 시 매개변수로 지정된 파일로 객체를

생성한다 .  만일 그 파일이 없으면 예외가 발생한다 .

- 06 :  하나의 문자를 읽어 int 형의 변수 i 에 저장한다 .  자바는 배정 연산 (=) 을 포함한 모든 연산을 int 형으로 수행하므로 int 형에 저장하여야 한다 .

- 07 : i  변숫값은 int 형이므로 그대로 출력하면 연속된 숫자가 출력되게 된다 . int 형의 변숫값을 char 형으로 형변환하여 출력하여야 한다 .

Page 28: 12 장 .  입출력

12장 . 입출력

5 바이트 스트림

28

바이트 스트림과 연관된 클래스

410 page

Page 29: 12 장 .  입출력

12장 . 입출력

5-1 OutputStream 클래스와 InputStream 클래스5 바이트 스트림

29

OutputStream 클래스- 바이트 스트림을 출력하는 메소드들을 제공

InputStream 클래스- 입력으로 ( 키보드 , 파일 등 ) 부터 데이터를 읽어오는 메소드를 제공

Page 30: 12 장 .  입출력

12장 . 입출력

5-1 OutputStream 클래스와 InputStream 클래스5 바이트 스트림

30

OutputStream  클래스의 주요 메소드

메소드 설명void close() throws IOException 출력 스트림을 닫는다 .

void flush() throws IOException 버퍼에 남아 있는 출력 스트림을 모두 출력

void write(int i) throws IOException 정수  i의 하위  8비트를 출력

void write(byte buffer[]) throws IOExcep-tion buffer의 내용을 출력

void write(byte buffer[], int index, int size) throws IOException buffer의  index위치부터  size만큼의 바이트를 출력

Page 31: 12 장 .  입출력

12장 . 입출력

5-1 OutputStream 클래스와 InputStream 클래스5 바이트 스트림

31

InputStream  클래스의 주요 메소드

메소드 설명int available() 현재 읽기 가능한 바이트의 수를 반환

void close() 입력 스트림을 닫는다 .

int read()입력 스트림으로부터 한 바이트를 읽어  int 값으로 반환한다 . 더 이상 읽을 값이 없을 경우  -1을 반환

int read(byte buffer[])입력 스트림으로부터  buffer[] 크기만큼을 읽어  buffer 배열에 저장하고 읽은 바이트 수를 반환

int read(byte buffer[], int offset, int numBytes)

입력 스트림으로부터  numBytes만큼을 읽어  buffer[]의  offset 

위치에 저장하고 읽은 바이트 수를 반환

int skip(long numBytes)numBytes로 지정된 바이트를 스킵 (skip)하고 스킵된 바이트 수를 반환

void mark(int numBytes) 입력 스트림의 현재의 위치에 mark 한다 .

boolean markSupported() 현재의 입력 스트림이 mark()와  reset()을 지원하면  true를 반환

void reset()입력 스트림의 입력 시작 부분을 현재의 위치에서 가장 가까운 이전의 mark 위치로 설정

Page 32: 12 장 .  입출력

12장 . 입출력

5-2 FileOutputStream 클래스와 FileInputStream 클래스5 바이트 스트림

32

FileOutputStream 클래스- OutputStream 클래스로부터 상속된 클래스

- 파일에 바이트 스트림을 출력할 수 있는 기능을 제공

FileOutputStream 클래스 생성자

FileOutputStream(String filepath) throws IOExceptionFileOutputStream(String filepath, boolean append) throws IOExcep-

tionFileOutputStream(File fileObj) throws IOException

형식

Page 33: 12 장 .  입출력

12장 . 입출력

5-2 FileOutputStream 클래스와 FileInputStream 클래스5 바이트 스트림

33

FileInputStream 클래스- InputStream 클래스로부터 상속된 클래스

- 파일로부터 입력을 받을 수 있는 기능을 제공

FileInputStream 클래스 생성자

FileInputStream(String filepath) throws FileNotFoundExceptionFileInputStream(File fileObj) throws FileNotFoundException

형식

Page 34: 12 장 .  입출력

12장 . 입출력

5-2 FileOutputStream 클래스와 FileInputStream 클래스5 바이트 스트림

34

FileOutputStream  클래스와 FileInputStream  클래스의 역할

412 page

Page 35: 12 장 .  입출력

12장 . 입출력

5-2 FileOutputStream 클래스와 FileInputStream 클래스5 바이트 스트림

35

실습예제

FileOutputStreamTest.java

010203040506070809101112

import java.io.*;public class FileOutputStreamTest { public static void main(String args[]) throws IOException { FileOutputStream fos = new FileOutputStream(args[0]); for(int i = 1; i <= 5 ; i++) { fos.write(i); } fos.close(); System.out.println

("지정한 화일명으로  ByteStreamFile을 생성하였습니다 .");

}}

FileOutputStream 객체 생성

int i의 하위 8비트만 출력

Page 36: 12 장 .  입출력

12장 . 입출력

5-2 FileOutputStream 클래스와 FileInputStream 클래스5 바이트 스트림

36

프로그램 설명- 05 :  실행 시 매개변수로 받은 파일 이름으로 FileOutputStream  객체를 생성하였다 .

- 06 :  반복문에서 1~5  사이의 숫자를 write()  메소드를 통해 출력하고 있다 .  이 경우 int

형의 하위 8 비트만 출력된다 .  프로그램을 수정하여 1 부터 300 까지를 반복하여 출력해보면 그 결과를 알 수 있다 .

Page 37: 12 장 .  입출력

12장 . 입출력

5-2 FileOutputStream 클래스와 FileInputStream 클래스5 바이트 스트림

37

실습예제

FileInputStreamTest.java

01020304050607080910111213

import java.io.*;class FileInputStreamTest { public static void main(String args[]) throws IOException { FileInputStream fs = new FileInputStream(args[0]); int i; while((i = fs.read()) != -1) { System.out.println(i); } fs.close(); System.out.println

("지정한 파일로부터 바이트 스트림을 입력받아  화면에 출력하였습니다 .") ;

}}

FileInputStream 객체를 생성

한 바이트를 읽는다 .

Page 38: 12 장 .  입출력

12장 . 입출력

5-2 FileOutputStream 클래스와 FileInputStream 클래스5 바이트 스트림

38

프로그램 설명- 00 :  실행 시 매개변수로 받은 파일 이름으로 FileInputStream  객체를 생성한다 .

- 00 :  파일로부터 한 바이트를 읽어들여 int 형의 변수에 저장한다 .

- 00 :  int 형 변수의 값을 출력한다 .  앞의 FileOutputStreamTest.java  프로그램을 수정하여 1~260 까지를 저장한 다음 위의 프로그램을 수행시켜보면 , 1 부터 255 까지 출력되고 0, 1, 2, 3, 4  까지 출력됨을 볼 수 있다 . 8 비트 단위의 입출력이고 입출력된 내용이 int 형에 저장되었기 때문에 28-1=255 까지 출력됨을 볼 수 있다 .  일반적인 byte  단위의 수 표현에서는 가장 왼쪽 비트를 부호비트로 취급하므로 27-1=127  까지만 표현이 가능하다 .

Page 39: 12 장 .  입출력

12장 . 입출력

5-3 DataOutputStream 클래스와 DataInputStream 클래스5 바이트 스트림

39

DataOutputStream 클래스- FilterOutputStream 클래스로부터 상속되었고 DataOutput 인터페이스를 사용하여

구현된 클래스

- 자바의 기본 자료형 데이터를 바이트 스트림으로 출력하는 기능을 제공

DataOutputStream 클래스 생성자

DataOutputStream(OutputStream outputStream)형식

Page 40: 12 장 .  입출력

12장 . 입출력

5-3 DataOutputStream 클래스와 DataInputStream 클래스5 바이트 스트림

40

DataOutputStream  클래스에 구현된 DataOutput  인터페이스의 메소드 메소드 설명

void write(int i) throws IOException i를 스트림으로 출력

void write(byte buffer[]) throws IOException buffer를 스트림으로 출력void write(byte buffer[], int index, int size) throws IOEx-ception buffer의  index 위치부터  size만큼의 바이트를 스트림으로 출력

void writeByte(int i) throws IOException i의 하위  8비트를 스트림으로 출력

void writeBytes(String s) throws IOException 문자열  s를 스트림으로 출력

void writeChar(int I) throws IOException i의 하위  16비트를 스트림으로 출력

void writeChars(String s) throws IOException 문자열  s를 스트림으로 출력

void writeDouble(double d) throws IOException d를 스트림으로 출력

void writeFloat(float f) throws IOException f를 스트림으로 출력

void writeInt(int I) throws IOException i를 스트림으로 출력

void writeLong(long l) throws IOException l을 스트림으로 출력

void writeShort(short s) throws IOException s를 스트림으로 출력

void writeUTF(String s) throws IOException s를 스트림으로 출력 . 유니코드를 UTF-8 엔코딩을 이용하여 변환

Page 41: 12 장 .  입출력

12장 . 입출력

5-3 DataOutputStream 클래스와 DataInputStream 클래스5 바이트 스트림

41

DataOutputStream  클래스와 DataInputStream  클래스의 역할

417 page

Page 42: 12 장 .  입출력

12장 . 입출력

5-3 DataOutputStream 클래스와 DataInputStream 클래스5 바이트 스트림

42

DataInputStream 클래스- FilterInputStream 클래스로부터 상속되고 DataInput 인터페이스를 사용하여 구현된

클래스

- 바이트 스트림으로부터 자바의 기본 자료형 데이터를 읽는 기능을 제공

DataInputStream 클래스 생성자

DataInputStream(InputStream inputStream)형식

Page 43: 12 장 .  입출력

12장 . 입출력

5-3 DataOutputStream 클래스와 DataInputStream 클래스5 바이트 스트림

43

DataInputStream  클래스에 구현된 DataInput  인터페이스의 메소드

메소드 설명

boolean  readBoolean(boolean  b)  throws IOException 스트림으로부터 읽은  boolean을 반환

byte readByte( ) throws IOException 스트림으로부터 읽은  byte를 반환

char readChar( ) throws IOException 스트림으로부터 읽은  char를 반환

double readDouble( ) throws IOException 스트림으로부터 읽은  double을 반환

float readFloat( ) throws IOException 스트림으로부터 읽은  float를 반환

long readLong( ) throws IOException 스트림으로부터 읽은  long을 반환

short readShort( ) throws IOException 스트림으로부터 읽은  short를 반환

int readInt( ) throws IOException 스트림으로부터 읽은  int를 반환

void  readFully(byte  buffer[  ])  throws IOException 스트림으로부터  buffer 크기만큼의 바이트를 읽어  buffer 배열에 저장

void readfully(byte buffer[ ] int index, int size) throws IOException

스트림으로부터   size만큼의  바이트를  읽어   buffer의  index 위치에 저장

int readUnsignedByte( ) throws IOException 스트림으로부터 읽은  unsigned byte를 반환

int readUnsignedShort( ) throws IOException 스트림으로부터 읽은  unsigned short를 반환

int skipBytes(int n) 입력 스트림으로부터  n 바이트를 스킵

Page 44: 12 장 .  입출력

12장 . 입출력

5-3 DataOutputStream 클래스와 DataInputStream 클래스5 바이트 스트림

44

실습예제DataOutputStreamTest.java

010203040506070809101112131415161718

import java.io.*;public class DataOutputStreamTest { public static void main(String args[]) throws IOException { FileOutputStream fos = new FileOutputStream(args[0]); DataOutputStream dos = new DataOutputStream(fos); dos.writeBoolean(false); dos.writeByte(Byte.MAX_VALUE);

dos.writeChar('김 ');

dos.writeDouble(Double.MAX_VALUE); dos.writeFloat(Float.MIN_VALUE); dos.writeInt(Integer.MAX_VALUE); dos.writeLong(Long.MAX_VALUE); dos.writeShort(Short.MAX_VALUE); fos.close(); }}

문자를 출력하는 writeChar() 메소드 수행

파일에 출력하기 위한 객체 생성

Byte 클래스에 선언된 상수 MAX_VALUE 사용

데이터를 파일에 출력하기 위한 객체 생성 (파일객체와 연계 )

Page 45: 12 장 .  입출력

12장 . 입출력

5-3 DataOutputStream 클래스와 DataInputStream 클래스5 바이트 스트림

45

프로그램 설명- 04 :  파일에 출력하기 위해 매개변수로 지정된 값을 가지고 FileOutputStream  객체를

생성하였다 .

- 05 :  파일에 자바의 기본 자료형 데이터를 출력하기 위해 DataOutputStream  객체를 생성하는데 ,  앞에서 생성된 파일 객체를 이용해서 생성한다 .  이렇게 생성된 객체는 자바의 기본 자료형 데이터를 파일에 출력할 수 있는 특성을 가지게 된다 .

- 07~13 :  기본 자료형 클래스에는 MAX_VALUE 와 MIN_VALUE 라는 상숫값을 가지고 있기 때문에 프로그램에서 자유롭게 사용이 가능하다 .

실행결과 - 위 프로그램은 아무런 결과를 출력하지 않고 , 파일만 생성한다 . 파일의 내용은 바이트

단위로 저장되므로 파일의 내용을 볼 수 없다 .

Page 46: 12 장 .  입출력

12장 . 입출력

5-3 DataOutputStream 클래스와 DataInputStream 클래스5 바이트 스트림

46

실습예제DataInputStreamTest.java

0102030405060708091011121314151617

import java.io.*;class DataInputStreamTest { public static void main(String args[]) throws IOException { FileInputStream fs = new FileInputStream(args[0]); DataInputStream dis = new DataInputStream(fs); System.out.println(dis.readBoolean()); System.out.println(dis.readByte()); System.out.println(dis.readChar()); System.out.println(dis.readDouble()); System.out.println(dis.readFloat()); System.out.println(dis.readInt()); System.out.println(dis.readLong()); System.out.println(dis.readShort()); fs.close(); }}

파일 입력을 위한 객체 생성

기본 자료형 입력 객체 생성 (파일과 연계 )

기본 자료형 데이터를 읽는다 .

Page 47: 12 장 .  입출력

12장 . 입출력

5-3 DataOutputStream 클래스와 DataInputStream 클래스5 바이트 스트림

47

프로그램 설명- 04 :  파일로부터 입력받기 위해 매개변수로 지정된 값을 가지고 FileInputStream  객체를

생성하였다 .

- 05 :  파일로부터 자바의 기본 자료형 데이터를 입력받기 위해 DataInputStream  객체를 생성하는데 ,  앞에서 생성된 파일 객체를 이용해서 생성한다 .  이렇게 생성된 객체는 자바의 기본 자료형 데이터를 파일로부터 입력할 수 있는 특성을 가지게 된다 .

- 07~14 :  기본 자료형 데이터를 읽어들인다 .  출력한 순서대로 입력하여야 정확한 데이터를 얻을 수 있다 .  만일 순서가 틀리게 되면 예상치 않은 데이터가 출력되게 된다 .

Page 48: 12 장 .  입출력

12장 . 입출력

5-3 DataOutputStream 클래스와 DataInputStream 클래스5 바이트 스트림

48

Page 49: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

49

직렬화된 데이터- 객체를 순차적인 바이트로 표현한 데이터를 의미

영속성- 객체가 자신의 상태를 기록해 두어 다음 기회에 또는 다른 환경에서 재생될 수 있는 능력을

의미

Page 50: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

50

Serializable 인터페이스를 포함하는 클래스

class Box implements Serializable { int w; int h; int d;}

형식Serializable 인터페이스를 포함

Page 51: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

51

ObjectOutputStream 클래스 생성자

ObjectOutputStream(OutputStream outputStream)형식

Page 52: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

52

ObjectOutputStream  클래스의 주요 메소드

메소드 설명

void close( ) 스트림을 닫는다 .void flush( ) 버퍼의 모든 내용을 출력한다 .void write(byte[ ] b, int index, int size) 바이트 배열  b의  index 위치부터  size만큼을 출력한다 .void write(byte[ ] b) 바이트 배열  b를 출력한다 .void write(int ontbyte) int 값의 하위 한 바이트를 출력한다 .void writeBoolean(boolean data) boolean 값을 출력한다 .void writeByte(int data) 한 바이트를 출력한다 .void writeBytes(String str) str 문자열을 연속된 바이트로 출력한다 .void writeChar(int data) 한 문자를 출력한다 .void writeChars(String str) str 문자열을 연속된 문자로 출력한다 .void writeDouble(double data) double 값을 출력한다 .void writeFloat(float data) float 값을 출력한다 .void writeInt(int data) int 값을 출력한다 .void writeLong(long data) long 값을 출력한다 .void writeObject(Object obj) 객체를 출력한다 .void writeShort(int data) short 값을 출력한다 .void writeUTF(String data) 문자열을 UTF 인코딩으로 출력한다 .

Page 53: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

53

ObjectInputStream 클래스- 직렬화된 데이터로부터 역 직렬화 (Deserialization) 를 수행하여 원래의 데이터로 복구하는

기능을 제공하는 클래스

ObjectInputStream 클래스 생성자

ObjectInputStream(InputStream inputStream)형식

Page 54: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

54

ObjectOutputStream  클래스의 주요 메소드

메소드 설명

void close() 스트림을 닫는다 .

int read() 한 바이트를 읽는다 .

int read(byte[] b, int off, int len) 바이트 배열로 읽어들인다 .

boolean readBoolean() boolean 값을 읽는다 .

byte readByte() 한 바이트를 읽는다 .

char readChar() 문자를 읽는다 .

double readDouble() double 값을 읽는다 .

float readFloat() float 값을 읽는다 .

int readInt() int 값을 읽는다 .

long readLong() long 값을 읽는다 .

Object readObject() 객체를 읽는다 .

short readShort() short 값을 읽는다 .

int readUnsignedByte() 부호 없는 바이트 값을 읽는다 .

int readUnsignedShort() 부호 없는  short 값을 읽는다 .

String readUTF() UTF 인코딩을 읽어서 문자열 타입으로 반환

Page 55: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

55

실습예제ObjectWriteTest.java

010203040506070809101112

import java.io.*;class Box implements Serializable { int w; int h; int d; public Box(int a, int b, int c) { w = a; h = b; d = c; }}

Serializable 인터페이스를 포함하는 클래스 생성

Page 56: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

56

실습예제ObjectWriteTest.java

13141516171819202122232425

public class ObjectWriteTest { public static void main(String args[]) throws Exception {

String s1 = "***박스의 가로 ,세로 ,높이 ***";

Box mybox1 = new Box(10,20,30); ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream ("tmp.txt")); oos.writeObject(s1); oos.writeObject(mybox1); oos.writeDouble(123.456); oos.close(); }}

객체를 파일에 출력하기 위한 객체 생성String 객체 출력

Box 객체 출력Double 객체 출력

Page 57: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

57

프로그램 설명- 02 : Box  클래스의 객체를 저장하기 위해서 클래스를 작성할 때 Serializable 

인터페이스를 포함하여 작성하였다 .

- 17 :  파일에 객체를 저장하기 위해 파일 이름을 가지고 FileOutputStream  객체를 생성한 다음 ,  그 객체를 가지고 ObjectOutputStream  객체를 생성하였다 .  위 문장은 두 개의 문장을 하나의 문장으로 작성한 것이다 .  즉 위 문장은 다음 문장과 같은 의미이다 .

FileOutputStream oof = new FileOutputStream("tmp.txt");

ObjectOutputStream oos = new ObjectOutputStream(oof);

- 18 : writeObject()  메소드를 이용하여 String  객체 s1 을 출력하였다 .

- 20~21 : Box  객체와 Double  객체를 출력하였다 .

Page 58: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

58

실습예제ObjectReadTest.java

0102030405060708091011121314151617

import java.io.*;public class ObjectReadTest { public static void main(String args[]) throws Exception { ObjectInputStream ois = new ObjectInputStream(new FileInputStream("tmp.txt")); String s2 = (String)ois.readObject(); Box mybox2 = (Box)ois.readObject(); System.out.println(s2);

System.out.println("박스의 가로는  : "+mybox2.w);

System.out.println("박스의 세로는  : "+mybox2.h);

System.out.println("박스의 높이는  : "+mybox2.d);

System.out.println("Double 값은  : " + ois.readDouble());

}}

하나의 객체를 읽어 Box로 형변환

읽은 객체를 출력

파일로부터 객체를 읽기 위한 객체 생성

하나의 객체를 읽어  String으로 형변환

읽은 객체의 요소를 출력

읽은 Double 객체의 값 출력

Page 59: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

59

프로그램 설명- 04, 05 : FileInputStream  클래스와 ObjectInputStream  클래스를 이용하여 파일로부터

객체를 읽어들일 수 있는 특성을 가진 객체를 생성하였다 .

- 06 :  생성된 객체를 이용하여 하나의 객체를 읽어들인 다음 , String  클래스의 객체로 형변환을 하였다 . readObject()  메소드가 반환하는 객체는 Object  클래스형의 객체이고 이 객체를 Object  클래스 ( 자바의 최상위 클래스 ) 의 하위 클래스인 String 형의 객체 변수에 배정하려면 명시적인 형변환 문장이 요구된다 .  형변환 문장을 기술하지 않으면 오류가 발생한다 .

- 08 :  하나의 객체를 읽어들여 Box 형으로 변환한다 .

- 10~14 :  객체의 요소들을 출력하였다 .

- 15 : Double  객체를 readDouble()  메소드 (64 비트 :8 바이트를 읽어들임 ) 를 사용하여 읽어들였다 .  만일 readFloat()  메소드 (32 비트 : 4 바이트를 읽어들임 ) 로 읽어들이면 틀린 값이 출력되게 된다 .

Page 60: 12 장 .  입출력

12장 . 입출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림

60

Page 61: 12 장 .  입출력

java.io 패키지 개요 ① 자바의 입출력은 하드웨어와 독립적으로 설계되어 어떠한 컴퓨터에서나 일관된

입출력을 수행한다 .

② 자바의 입출력은 스트림 (stream) 을 사용한다 . 스트림은 순서가 있는 일련의 데이터를 의미한다 .

파일과 디렉터리 ① 자바는 파일과 디렉터리를 다루기 위해 File 클래스를 제공한다 . 다양한 메소드를

이용하여 디렉터리와 파일에 관한 정보를 얻을 수 있다 .

문자 스트림과 바이트 스트림 ① 스트림에는 문자 스트림과 바이트 스트림 두 가지 형태가 있다 .

② 문자 스트림은 16 비트 문자나 문자열들을 읽고 쓰기 위한 스트림이고 , 바이트 스트림 ( 또는 바이너리 스트림 ) 은 8 비트의 바이트를 읽고 쓰기 위한 스트림이다 .

학습정리

61

Page 62: 12 장 .  입출력

문자 스트림 ① Writer 와 Reader 클래스는 문자 스트림 입출력을 대표하는 추상 클래스로서 다양한

메소드를 가지고 있다 . 이러한 추상 클래스는 하위 클래스에서 오버라이딩되어 사용된다 .

② FileWriter 클래스와 FileReader 클래스는 파일에 문자 스트림을 입출력하기 위해 사용하는

클래스이다 .

바이트 스트림 ① OutputStream 클래스와 InputStream 클래스는 바이트 스트림 입출력을 대표하는 추상

클래스로서 다양한 메소드를 가지고 있다 . 이러한 추상 클래스는 하위 클래스에서

오버라이딩되어 사용된다 .

② FileOutputStream 클래스와 FileInputStream 클래스는 파일에 바이트 스트림을

입출력하기 위해 사용하는 클래스이다 .

③ DataOutputStream 클래스와 DataInputStream 클래스는 자바의 기본 자료형 데이터를

바이트로 입출력하기 위해 사용하는 클래스이다 .

④ OjbectOutputStream 클래스와 OjbectInputStream 클래스는 객체를 입출력하기 위한

클래스이다 . 객체를 입출력하기 위해 자바는 직렬화된 데이터를 사용한다 .

학습정리

62

Page 63: 12 장 .  입출력

12 장 . 입출력

63

수고하셨습니다 .질문 있습니까 ?