Java 12장. 입출력 public class SumTest {

Slides:



Advertisements
Similar presentations
멘토링 2 주차 장 프로그래밍을 위한 자바의 자료형  값이 변하지 않는 상수  메모리 기억공간인 변수.
Advertisements

명품 JAVA Programming 제 3 장 반복문, 배열, 예외처리.
I/O 프로그래밍 컴퓨터 공학실험(I) 인공지능 연구실.
11장. 프로토콜 핸들러 AI &HC I LAB 김 성 현.
어서와 Java는 처음이지! 제17장 파일입출력.
캡스톤 프로젝트(자바) 입출력.
네트워크 프로그래밍 및 실습.
입출력 14.1 java.io 패키지의 개요 14.2 파일과 디렉토리
28강 JAVA 입출력(I/O) 알아보기 - 입출력(I/O) 이란? - JAVA 입출력 API(Input~, Output~)
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
IntArray[0] int length 5 intArray 객체 제 3 장 반복문, 배열, 예외처리.
제9장 입출력과 JNI.
어서와 Java는 처음이지! 제2장 자바 프로그래밍 기초.
어서와 Java는 처음이지! 제4장 배열.
12장. JSP에서 자바빈 활용 제12장.
제 4장 문 장 배정문 혼합문 제어문 표준 입출력.
4부 클래스 라이브러리 “4부에서는 자바 언어의 API인 클래스 라이브러리에 관해 설명합니다
명품 JAVA Programming.
5 익셉션 처리.
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
파일 입출력에 사용되는 자바 클래스들 JDK 라이브러리의 파일을 다루는 클래스들 파일의 내용을 읽고 쓰는 클래스들
2강. JAVA 프로그래밍이란?-II & 변수 JAVA 프로그램 환경설정과 실행 방법 변수란?
명품 JAVA Essential.
Power Java 제4장 자바 프로그래밍 기초.
8장 자바 입출력.
7장 파일과 데이터베이스.
14.3 문자(character) 스트림과 바이트(byte) 스트림
Chapter 14. 입출력 스트림.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
Choi, Namseok Java 기초 (Java의 제어문과 배열) Choi, Namseok
Java Programming Language (4)
JAVA ADVANCED File IO IT 아카데미.
01. 직렬화와 역직렬화에 대하여 객체의 직렬화 직렬화와 역직렬화
명품 JAVA Programming 제 8 장 입출력 스트림과 파일 입출력.
명품 JAVA Essential.
명품 JAVA Programming 제 16 장 네트워크.
명품 Java Programming.
제 11 장 java.lang 패키지 제 12 장 문자열 제 13 장 유틸리티 제 14 장 입출력 제 15 장 네트워킹
Chap07 예외 처리 7.1 예외의 개요 7.2 예외 관련 클래스 7.3 예외 처리.
10장 다중 스레드 10.1 스레드 개요 10.2 Thread 클래스 10.3 스레드 생성
Hadoop 김연왕
메모장 구동.
주소록 프로그램.
Network Programming(1)
자바 5.0 프로그래밍.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
명품 JAVA Programming.
입출력 CHAPTER 12 Section 1 java.io 패키지 개요 Section 2 파일과 디렉터리
I/O&socket통신 POWERPOINT & GROUP STUDY 한재희 김상훈 최기람 황인준 이어진.
12장 문자열 12.1 문자열의 개요 12.2 String 클래스 12.3 StringBuffer 클래스.
Sookmyung Women’s Univ. PSLAB Ohe, heejung
어서와 Java는 처음이지! 제4장 배열 IT응용시스템공학과 김형진 교수.
DataScience Lab. 박사과정 김희찬 (월)
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
Java의 정석 제 2 장 변수(Variable) Java 정석 남궁성 강의
DataScience Lab. 박사과정 김희찬 (월)
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
자바 5.0 프로그래밍.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
자바 5.0 프로그래밍.
Stream의 이해 : System Bufferring
Java 5장. 객체지향 개념 public class SumTest {
Choi Younghwan CSE HUFS
Presentation transcript:

Java 12장. 입출력 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 + "입니다"); }

학습목표 자바 시스템에서의 입출력 개요를 학습한다. 파일, 디렉터리와 연관된 클래스를 학습한다. 문자 스트림과 바이트 스트림 개요에 관해 학습한다. 문자 스트림 관련 클래스에 관해 학습한다. 문자 스트림을 통하여 파일에 입출력하는 방법을 학습한다. 바이트 스트림 관련 클래스에 관해 학습한다. 바이트 스트림을 통하여 파일에 입출력하는 방법과 객체를 입출력하는 방법에 관해 학습한다.

목차 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 클래스

1 java.io 패키지 개요 입출력 기능 프로그램에서 사용된 데이터를 영구적으로 저장하여 후에 다른 프로그램에서 사용하게 하기 위해 필요한 기능 프로그램에서 생성된 데이터를 파일 형태로 컴퓨터의 하드디스크나 보조 기억장치에 저장한 다음 다른 프로그램에서 이 데이터를 읽어 사용하는 기능 스트림 순서가 있는 일련의 데이터를 의미하는 추상적인 개념

1 java.io 패키지 개요 스트림을 통한 입출력의 예 395 page

1 java.io 패키지 개요 java.io 패키지의 클래스 계층 구조 396 page

File 클래스 File 클래스의 생성자 형식 2 파일과 디렉터리 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 객체와 파일 이름을 가진 객체

File 클래스의 주요 메소드 메소드 설명 2 파일과 디렉터리 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를 반환

File 클래스의 주요 메소드 메소드 설명 2 파일과 디렉터리 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를 반환

실습예제 2 파일과 디렉터리 FileDirTest1.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 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 객체로 생성 디렉터리인지, 파일인지를 판별

실습예제 프로그램 설명 2 파일과 디렉터리 05 : “C:/Windows” 디렉터리를 가지고 File 객체를 생성한다. 09 : list() 메소드는 현재 File 객체가 가지고 있는 디렉터리의 모든 요소(디렉터리 또는 파일)들을 String 객체의 배열로 반환하는 메소드이다. 11 : “C:/Windows” 디렉터리에 있는 각 요소들을 가지고 File 객체를 생성한다.  12 : 각 요소에 대해 디렉터리인지를 검사하여 출력한다. FileDirTest1.java 18 19 20 21 22 else System.out.println ("지정한 " + directory + " 는 디렉터리가 아님"); }

2 파일과 디렉터리

실습예제 2 파일과 디렉터리 FileDirTest2.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 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 객체 생성 파일의 이름을 출력

프로그램 설명 2 파일과 디렉터리 04 : “C:/log.txt”로 File 객체를 생성하였다. 05~17 : File 클래스의 다양한 메소드를 사용하고 있다. lastModified() 메소드는 파일이 마지막으로 수정된 날짜를 밀리초로 반환한다. 반환된 밀리초는 1970년 1월 1일부터 파일이 마지막으로 수정된 날짜까지의 밀리초이다.

3 문자(Chraracter) 스트림과 바이트(Byte) 스트림 문자 스트림 16비트 문자나 문자열들을 읽고 쓰기 위한 스트림 입출력을 위해서는 Reader, Writer 클래스와 그 하위 클래스를 이용 바이트 스트림(또는 바이너리 스트림) 8비트의 바이트를 읽고 쓰기 위한 스트림 입출력을 위해서는 InputStream, OutputStream 클래스와 그 하위 클래스를 이용

4 문자 스트림 문자 스트림과 연관된 클래스 403 page

4-1 Writer 클래스와 Reader 클래스 4 문자 스트림 4-1 Writer 클래스와 Reader 클래스 Writer 클래스 문자 스트림의 출력 기능을 제공 Reader 클래스 문자 스트림의 입력 기능을 제공

4-1 Writer 클래스와 Reader 클래스 4 문자 스트림 4-1 Writer 클래스와 Reader 클래스 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 크기만큼의 문자들을 스트림으로 출력

4-1 Writer 클래스와 Reader 클래스 4 문자 스트림 4-1 Writer 클래스와 Reader 클래스 Reader 클래스의 주요 메소드 메소드 설명 void close( ) 입력 스트림을 닫는다. int read( ) 다음 문자를 읽어 반환한다. 입력 스트림에 읽을 문자가 없으면 대기한다. 읽은 문자가 파일의 끝이면 -1을 반환 int read(char buffer[ ]) 입력  스트림으로부터  buffer  배열  크기만큼의  문자를  읽어buffer에 저장 int read(char buffer[ ], int offset, int numChars) 입력 스트림으로부터 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로 지정된 문자 수만큼을 스킵하고 스킵된 문자의 수를 반환

4-1 Writer 클래스와 Reader 클래스 4 문자 스트림 4-1 Writer 클래스와 Reader 클래스 [예외를 호출한 메소드로 넘겨주는 방법] public static void main(String args[]) throws IOException { .......... FileWriter fw = new FileWriter(args[0]); ............ fw.write("Line " + i + "\n"); ........... fw.close(); } 호출한 메소드에 예외를 넘김

4-1 Writer 클래스와 Reader 클래스 4 문자 스트림 4-1 Writer 클래스와 Reader 클래스 [예외를 메소드 내에서 처리하는 방법] 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); .......... 예외 발생 가능 영역 지정 예외 처리 루틴 작성

4-2 FileWriter 클래스와 FileReader 클래스 4 문자 스트림 4-2 FileWriter 클래스와 FileReader 클래스 FileWriter 클래스 OutputStreamWriter 클래스로부터 상속된 클래스 FileWriter 클래스의 생성자 FileReader 클래스의 생성자 FileWriter(String filepath) throws IOException FileWriter(String filepath, boolean append) throws IOException FileWriter(File fileObj) throws IOException 형식 FileReader(String filepath) FileReader(File fileObj) 형식

4-2 FileWriter 클래스와 FileReader 클래스 4 문자 스트림 4-2 FileWriter 클래스와 FileReader 클래스 FileWriter 클래스와 FileReader 클래스의 역할 406 page

4-2 FileWriter 클래스와 FileReader 클래스 4 문자 스트림 4-2 FileWriter 클래스와 FileReader 클래스 실습예제 FileWriterTest.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 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 객체 생성 객체를 통해 문자 배열 내용 출력 파일을 닫는다.

4-2 FileWriter 클래스와 FileReader 클래스 4 문자 스트림 4-2 FileWriter 클래스와 FileReader 클래스 프로그램 설명 03 : throws 절을 이용하여 예외를 처리하였다. 파일을 생성하고 입출력을 수행하기 위해서는 반드시 예외를 처리해 주어야 한다. 예를 들어 출력할 파일을 생성할 수 없다거나, 입력할 파일이 존재하지 않는 경우를 대비하기 위해서이다. 07 : 출력할 문자열 source 크기에 해당하는 문자 배열 input을 생성하였다.  08 : getChars() 메소드는 String 클래스에 선언된 메소드이다. 문자열을 문자 배열로 변환하는 메소드이다.  10 : FileWriter 객체를 생성하고 있다. 매개변수로 받은 파일 이름으로 파일을 생성한다. 11 : 파일에 input 문자 배열을 출력하고 있다. write() 메소드는 오버로딩되어 사용된다. 문자열 source를 직접 write() 메소드를 이용하여 출력할 수도 있다. 즉 5,6번 문장을 삭제하고 fw.write(source)를 이용하여 문자열을 직접 출력할 수 있다. 12 : 파일을 닫는다. 즉 출력 스트림을 닫는다.

4-2 FileWriter 클래스와 FileReader 클래스 4 문자 스트림 4-2 FileWriter 클래스와 FileReader 클래스 실습예제 FileReaderTest.java 01 02 03 04 05 06 07 08 09 10 11 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 객체를 생성 파일로부터 하나의 문자를 읽는다 문자로 형변환하여 출력 

4-2 FileWriter 클래스와 FileReader 클래스 4 문자 스트림 4-2 FileWriter 클래스와 FileReader 클래스 프로그램 설명 04 : FileReader 클래스로부터 객체를 생성한다. 실행 시 매개변수로 지정된 파일로 객체를 생성한다. 만일 그 파일이 없으면 예외가 발생한다. 06 : 하나의 문자를 읽어 int형의 변수 i에 저장한다. 자바는 배정 연산(=)을 포함한 모든 연산을 int형으로 수행하므로 int형에 저장하여야 한다. 07 : i 변숫값은 int형이므로 그대로 출력하면 연속된 숫자가 출력되게 된다. int형의 변숫값을 char형으로 형변환하여 출력하여야 한다.

5 바이트 스트림 바이트 스트림과 연관된 클래스 410 page

5-1 OutputStream 클래스와 InputStream 클래스 5 바이트 스트림 5-1 OutputStream 클래스와 InputStream 클래스 OutputStream 클래스 바이트 스트림을 출력하는 메소드들을 제공 InputStream 클래스 입력으로(키보드, 파일 등)부터 데이터를 읽어오는 메소드를 제공

5-1 OutputStream 클래스와 InputStream 클래스 5 바이트 스트림 5-1 OutputStream 클래스와 InputStream 클래스 OutputStream 클래스의 주요 메소드 메소드 설명 void close() throws IOException 출력 스트림을 닫는다. void flush() throws IOException 버퍼에 남아 있는 출력 스트림을 모두 출력 void write(int i) throws IOException 정수 i의 하위 8비트를 출력 void write(byte buffer[]) throws IOException buffer의 내용을 출력 void write(byte buffer[], int index, int size)  throws IOException buffer의 index위치부터 size만큼의 바이트를 출력

5-1 OutputStream 클래스와 InputStream 클래스 5 바이트 스트림 5-1 OutputStream 클래스와 InputStream 클래스 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 위치로 설정

5-2 FileOutputStream 클래스와 FileInputStream 클래스 5 바이트 스트림 5-2 FileOutputStream 클래스와 FileInputStream 클래스 FileOutputStream 클래스 OutputStream 클래스로부터 상속된 클래스 파일에 바이트 스트림을 출력할 수 있는 기능을 제공 FileOutputStream 클래스 생성자 FileOutputStream(String filepath) throws IOException FileOutputStream(String filepath, boolean append) throws IOException FileOutputStream(File fileObj) throws IOException 형식

5-2 FileOutputStream 클래스와 FileInputStream 클래스 5 바이트 스트림 5-2 FileOutputStream 클래스와 FileInputStream 클래스 FileInputStream 클래스 InputStream 클래스로부터 상속된 클래스 파일로부터 입력을 받을 수 있는 기능을 제공 FileInputStream 클래스 생성자 FileInputStream(String filepath) throws FileNotFoundException FileInputStream(File fileObj) throws FileNotFoundException 형식

5-2 FileOutputStream 클래스와 FileInputStream 클래스 5 바이트 스트림 5-2 FileOutputStream 클래스와 FileInputStream 클래스 FileOutputStream 클래스와 FileInputStream 클래스의 역할 412 page

5-2 FileOutputStream 클래스와 FileInputStream 클래스 5 바이트 스트림 5-2 FileOutputStream 클래스와 FileInputStream 클래스 실습예제 FileOutputStreamTest.java 01 02 03 04 05 06 07 08 09 10 11 12 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비트만 출력

5-2 FileOutputStream 클래스와 FileInputStream 클래스 5 바이트 스트림 5-2 FileOutputStream 클래스와 FileInputStream 클래스 프로그램 설명 05 : 실행 시 매개변수로 받은 파일 이름으로 FileOutputStream 객체를 생성하였다. 06 : 반복문에서 1~5 사이의 숫자를 write() 메소드를 통해 출력하고 있다. 이 경우 int형의 하위 8비트만 출력된다. 프로그램을 수정하여 1부터 300까지를 반복하여 출력해보면 그 결과를 알 수 있다.

5-2 FileOutputStream 클래스와 FileInputStream 클래스 5 바이트 스트림 5-2 FileOutputStream 클래스와 FileInputStream 클래스 실습예제 FileInputStreamTest.java 01 02 03 04 05 06 07 08 09 10 11 12 13 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 객체를 생성 한 바이트를 읽는다.

5-2 FileOutputStream 클래스와 FileInputStream 클래스 5 바이트 스트림 5-2 FileOutputStream 클래스와 FileInputStream 클래스 프로그램 설명 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 까지만 표현이 가능하다.

5-3 DataOutputStream 클래스와 DataInputStream 클래스 5 바이트 스트림 5-3 DataOutputStream 클래스와 DataInputStream 클래스 DataOutputStream 클래스 FilterOutputStream 클래스로부터 상속되었고 DataOutput 인터페이스를 사용하여 구현된 클래스 자바의 기본 자료형 데이터를 바이트 스트림으로 출력하는 기능을 제공 DataOutputStream 클래스 생성자 DataOutputStream(OutputStream outputStream) 형식

5-3 DataOutputStream 클래스와 DataInputStream 클래스 5 바이트 스트림 5-3 DataOutputStream 클래스와 DataInputStream 클래스 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 IOException 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 void writeDouble(double d) throws IOException d를 스트림으로 출력 void writeFloat(float f) throws IOException f를 스트림으로 출력 void writeInt(int I) throws IOException void writeLong(long l) throws IOException l을 스트림으로 출력 void writeShort(short s) throws IOException s를 스트림으로 출력 void writeUTF(String s) throws IOException s를 스트림으로 출력. 유니코드를 UTF-8 엔코딩을 이용하여 변환

5-3 DataOutputStream 클래스와 DataInputStream 클래스 5 바이트 스트림 5-3 DataOutputStream 클래스와 DataInputStream 클래스 DataOutputStream 클래스와 DataInputStream 클래스의 역할 417 page

5-3 DataOutputStream 클래스와 DataInputStream 클래스 5 바이트 스트림 5-3 DataOutputStream 클래스와 DataInputStream 클래스 DataInputStream 클래스 FilterInputStream 클래스로부터 상속되고 DataInput 인터페이스를 사용하여 구현된 클래스 바이트 스트림으로부터 자바의 기본 자료형 데이터를 읽는 기능을 제공 DataInputStream 클래스 생성자 DataInputStream(InputStream inputStream) 형식

5-3 DataOutputStream 클래스와 DataInputStream 클래스 5 바이트 스트림 5-3 DataOutputStream 클래스와 DataInputStream 클래스 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 바이트를 스킵

5-3 DataOutputStream 클래스와 DataInputStream 클래스 5 바이트 스트림 5-3 DataOutputStream 클래스와 DataInputStream 클래스 실습예제 DataOutputStreamTest.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 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(); } 파일에 출력하기 위한 객체 생성 데이터를 파일에 출력하기 위한 객체 생성(파일객체와 연계) Byte 클래스에 선언된 상수 MAX_VALUE 사용 문자를 출력하는 writeChar() 메소드 수행

5-3 DataOutputStream 클래스와 DataInputStream 클래스 5 바이트 스트림 5-3 DataOutputStream 클래스와 DataInputStream 클래스 프로그램 설명 04 : 파일에 출력하기 위해 매개변수로 지정된 값을 가지고 FileOutputStream 객체를 생성하였다. 05 : 파일에 자바의 기본 자료형 데이터를 출력하기 위해 DataOutputStream 객체를 생성하는데, 앞에서 생성된 파일 객체를 이용해서 생성한다. 이렇게 생성된 객체는 자바의 기본 자료형 데이터를 파일에 출력할 수 있는 특성을 가지게 된다. 07~13 : 기본 자료형 클래스에는 MAX_VALUE와 MIN_VALUE라는 상숫값을 가지고 있기 때문에 프로그램에서 자유롭게 사용이 가능하다. 실행결과 위 프로그램은 아무런 결과를 출력하지 않고, 파일만 생성한다. 파일의 내용은 바이트 단위로 저장되므로 파일의 내용을 볼 수 없다.

5-3 DataOutputStream 클래스와 DataInputStream 클래스 5 바이트 스트림 5-3 DataOutputStream 클래스와 DataInputStream 클래스 실습예제 DataInputStreamTest.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 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(); } 파일 입력을 위한 객체 생성 기본 자료형 입력 객체 생성(파일과 연계) 기본 자료형 데이터를 읽는다.

5-3 DataOutputStream 클래스와 DataInputStream 클래스 5 바이트 스트림 5-3 DataOutputStream 클래스와 DataInputStream 클래스 프로그램 설명 04 : 파일로부터 입력받기 위해 매개변수로 지정된 값을 가지고 FileInputStream 객체를 생성하였다. 05 : 파일로부터 자바의 기본 자료형 데이터를 입력받기 위해 DataInputStream 객체를 생성하는데, 앞에서 생성된 파일 객체를 이용해서 생성한다. 이렇게 생성된 객체는 자바의 기본 자료형 데이터를 파일로부터 입력할 수 있는 특성을 가지게 된다. 07~14 : 기본 자료형 데이터를 읽어들인다. 출력한 순서대로 입력하여야 정확한 데이터를 얻을 수 있다. 만일 순서가 틀리게 되면 예상치 않은 데이터가 출력되게 된다.

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

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 직렬화된 데이터 객체를 순차적인 바이트로 표현한 데이터를 의미 영속성 객체가 자신의 상태를 기록해 두어 다음 기회에 또는 다른 환경에서 재생될 수 있는 능력을 의미

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 Serializable 인터페이스를 포함하는 클래스 class Box implements Serializable { int w; int h; int d; } 형식 Serializable 인터페이스를 포함

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 ObjectOutputStream 클래스 생성자 ObjectOutputStream(OutputStream outputStream) 형식

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 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 인코딩으로 출력한다.

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 ObjectInputStream 클래스 직렬화된 데이터로부터 역 직렬화(Deserialization)를 수행하여 원래의 데이터로 복구하는 기능을 제공하는 클래스 ObjectInputStream 클래스 생성자 ObjectInputStream(InputStream inputStream) 형식

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 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 인코딩을 읽어서 문자열 타입으로 반환

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 실습예제 ObjectWriteTest.java 01 02 03 04 05 06 07 08 09 10 11 12 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 인터페이스를 포함하는  클래스 생성

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 실습예제 ObjectWriteTest.java 13 14 15 16 17 18 19 20 21 22 23 24 25 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 객체 출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 프로그램 설명 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 객체를 출력하였다.

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 실습예제 ObjectReadTest.java 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 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()); } 파일로부터 객체를 읽기 위한 객체  생성 하나의 객체를 읽어 String으로 형변환 하나의 객체를 읽어 Box로 형변환 읽은 객체를 출력 읽은 객체의 요소를 출력 읽은 Double 객체의 값 출력

5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 5 바이트 스트림 5-4 OjbectOutputStream 클래스와 OjbectInputStream 클래스 프로그램 설명 04, 05 : FileInputStream 클래스와 ObjectInputStream 클래스를 이용하여 파일로부터 객체를 읽어들일 수 있는 특성을 가진 객체를 생성하였다. 06 : 생성된 객체를 이용하여 하나의 객체를 읽어들인 다음, String 클래스의 객체로 형변환을 하였다. readObject() 메소드가 반환하는 객체는 Object 클래스형의 객체이고 이 객체를 Object 클래스(자바의 최상위 클래스)의 하위 클래스인 String형의 객체 변수에 배정하려면 명시적인 형변환 문장이 요구된다. 형변환 문장을 기술하지 않으면 오류가 발생한다. 08 : 하나의 객체를 읽어들여 Box형으로 변환한다. 10~14 : 객체의 요소들을 출력하였다. 15 : Double 객체를 readDouble() 메소드(64비트:8바이트를 읽어들임)를 사용하여 읽어들였다. 만일 readFloat() 메소드(32비트 : 4바이트를 읽어들임)로 읽어들이면 틀린 값이 출력되게 된다.

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

학습정리 java.io 패키지 개요 파일과 디렉터리 문자 스트림과 바이트 스트림 자바의 입출력은 하드웨어와 독립적으로 설계되어 어떠한 컴퓨터에서나 일관된 입출력을 수행한다. 자바의 입출력은 스트림(stream)을 사용한다. 스트림은 순서가 있는 일련의 데이터를 의미한다. 파일과 디렉터리 자바는 파일과 디렉터리를 다루기 위해 File 클래스를 제공한다. 다양한 메소드를 이용하여 디렉터리와 파일에 관한 정보를 얻을 수 있다. 문자 스트림과 바이트 스트림 스트림에는 문자 스트림과 바이트 스트림 두 가지 형태가 있다. 문자 스트림은 16비트 문자나 문자열들을 읽고 쓰기 위한 스트림이고, 바이트 스트림(또는 바이너리 스트림)은 8비트의 바이트를 읽고 쓰기 위한 스트림이다.

학습정리 문자 스트림 Writer와 Reader 클래스는 문자 스트림 입출력을 대표하는 추상 클래스로서 다양한 메소드를 가지고 있다. 이러한 추상 클래스는 하위 클래스에서 오버라이딩되어 사용된다. FileWriter 클래스와 FileReader 클래스는 파일에 문자 스트림을 입출력하기 위해 사용하는 클래스이다. 바이트 스트림 OutputStream 클래스와 InputStream 클래스는 바이트 스트림 입출력을 대표하는 추상 클래스로서 다양한 메소드를 가지고 있다. 이러한 추상 클래스는 하위 클래스에서 오버라이딩되어 사용된다. FileOutputStream 클래스와 FileInputStream 클래스는 파일에 바이트 스트림을 입출력하기 위해 사용하는 클래스이다. DataOutputStream 클래스와 DataInputStream 클래스는 자바의 기본 자료형 데이터를 바이트로 입출력하기 위해 사용하는 클래스이다. OjbectOutputStream 클래스와 OjbectInputStream 클래스는 객체를 입출력하기 위한 클래스이다. 객체를 입출력하기 위해 자바는 직렬화된 데이터를 사용한다.

12장. 입출력 수고하셨습니다. 질문 있습니까?