ByteStreamApp
package xyz.itwill.io;
// java.io 패키지 : 입력과 출력 관련 클래스가 선언된 패키지
// 스트림(Stream) : 값을 전달하기 위한 목적으로 생성된 입력클래스와 출력클래스의 객체
// > 시냇물이 프르는 모양을 모델링하여 만들어 값이 한쪽 방향으로 전달되며 순차적으로 처리
// 원시데이터 기반의 스트림 : 가공되지 않은 원시데이터를 전달하기 위한 입출력스트림
// > 값을 1Byte 단위로 입력 또는 출력하기 위한 스트림
// > InputStream 클래스와 OutputStram 클래스를 최상위 클래스로 관계가 설정된 클래스
// 스트림(Stream) : 값을 전달하기 위한 목적으로 생성된 입력클래스와 출력클래스의 객체
// > 시냇물이 프르는 모양을 모델링하여 만들어 값이 한쪽 방향으로 전달되며 순차적으로 처리
// 원시데이터 기반의 스트림 : 가공되지 않은 원시데이터를 전달하기 위한 입출력스트림
// > 값을 1Byte 단위로 입력 또는 출력하기 위한 스트림
// > InputStream 클래스와 OutputStram 클래스를 최상위 클래스로 관계가 설정된 클래스
import java.io.IOException;
// 키보드로 원시데이터를 입력받아 모니터에 전달하여 출력하는 프로그램 작성
// > EOF(End Of File : 입력종료 - Ctrl + Z) 신호를 입력하면 프로그램 종료
public class ByteStreamApp {
public static void main(String[] args) throws IOException {
System.out.println("[메세지] 키보드를 눌러 값을 입력해주세요. [프로그램종료 : ctrl + z]");
// 키보드 입력값을 저장하기 위한 변수
int readByte;
while (true) {
// System.in : Java 프로그램 개발을 위해 기본적으로 제공되는 키보드 입력스트림이 저장된 필드
// > Inputsteam 클래스를 기반으로 제공되는 입력스트림(객체)
// InputStram.read() : 입력스트림에 존재하는 값을 원시데이터 (1Byte)로 읽어 정수값으로 반환하는 메소드
// > 입력스트림에 값이 없는 경우 스레드는 일시 중지 상태로 전환
// > 입력스트림에 엔터가 입력될 경우 스레드 다시 실행
// > 입력스트림 또는 출력스트림관련 메소드는 IOException 발생
// > I0Exception은 일반 예외이므로 반드시 예외처리
readByte = System.in.read(); // 에러 뜨는 이유? > public static void main(String[] args) throws IOException
// 입력종료신호(Ctrl + Z : EOF)가 전달된 경우 반복문 종료
if (readByte == -1)
break;
// System.out : Java 프로그램 개발을 위해 기본적으로 제공되는 모니터 출력스트림이 저장된 필드
// > OutputStream 클래스를 기반으로 제공되는 입력스트림(객체) - PrintStream 클래스
// > 출력스트림에 값을 전달하여 모니터가 출력 처리
// OutputStram.write(int b) : 출력스트림으로 원시데이터 로 읽어 정수값으로 반환하는 메소드
System.out.write(readByte);
}
System.out.println("[메세지]프로그램을 종료합니다.");
}
}
CharacterStreamApp
package xyz.itwill.io;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
// 문자데이터 기반의 스트림(Character Stream) : 원시데이터를 가공처리한 문자데이터를 전달하기 위한 입출력스트림
// > 원시데이터를 가공하여 문자데이터를(2Byte)로 변환 - 인코딩 : 문자형태(캐릭터셋)
// > 값을 2Byte 단위로 입력 또는 출력하기 위한 스트림
// > Reader 클래스와 Writer클래스를 최상위 클래스로 관계가 설정된 클래스
// 키보드로 문자데이터(2Byte)를 입력받아 모니터에 전달하여 출력하는 프로그램 작성
// > EOF : 입력종료 - ctrl + z 신호를 입력하면 프로그램 종료
public class CharacterStreamApp {
public static void main(String[] args) throws IOException {
System.out.println("[메세지]키보드를 눌러 값을 입력해 주세요.[프로그램 종료 : Ctrl+Z]");
// InputStreamReader 클래스 : InputStream 객체를 전달받아 문자데이타를 입력받기 위한
// 입력스트림(Reader 객체)를 생성하기 위한 클래스 - 스트림 확장
InputStreamReader in=new InputStreamReader(System.in);
// OutputStreamWriter 클래스 : OutputStream 객체를 전달받아 문자데이타를 출력하기 위한
// 출력스트림(Writer 객체)를 생성하기 위한 클래스 - 스트림 확장
// OutputStreamWriter out=new OutputStreamWriter(System.out);
// PrintWriter 클래스 : OutputStream 객체를 전달받아 문자데이타를 출력하기 위한 출력스트림(Writer 객체)를 생성하기 위한 클래스
// > OutputStreamWriter 클래스보다 많은 출력메소드 제공
PrintWriter out=new PrintWriter(System.out);
int readByte;
while(true) {
// Reader.read() : 입력스트림에 존재하는 값을 문자데이타(2Byte)로 읽어 정수값(int)으로 반환하는 메소드
readByte = in.read();
if(readByte == -1)
break;
// Writer.write(int b) : 매개변수로 제공받은 값을 문자데이타(2Byte)로 출력스트림에 전달하는 메소드
// > 문자데이타는 출력스트림에 존재하는 버퍼(Buffer : 임시 메모리)에 일정한 크기만큼 저장하고 한번에 출력스트림으로 전달하여 출력 처리
out.write(readByte);
//Writer.flush() : 출력스트림의 버퍼에 존재하는 모든 값을 출력스트림으로 전달하는 메소드
out.flush();
}
System.out.println("[메세지]프로그램을 종료합니다.");
}
}
ConsoleIOApp
package xyz.itwill.io;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;
public class ConsoleIOApp {
public static void main(String[] args) throws IOException {
// Java 프로그램 개발을 위해 기본적으로 제공되는 키보드 입력스트림(System.in) 을 전달받아
// InputStreamRedaer 클래스의 입력스트림으로 확장하고 확장된 Reader 객체를 전달받아
// BufferedReader 클래스의 입력스트림으로 확장하여 대량의 문자데이터를 입력받을수 있는 입력스트림 생성
// > 입출력 관련 클래스는 스트림의 다단계 연결을 사용하여 스트림 확장 가능
// 키보드로 문자열을 입력받기 위한 입력 스틔림 생성
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
// Java 프로그램 개발을 위해 기본적으로 제공되는 모니터 출력스트림(System.out)은
// PrintStream 클래스로 생성되어 print() 또는 println() 메소드를 호출하여 매개변수로 전달받은 값을 문자열로 변환하여
// 출력 스트림에 전달해 출력 가능
System.out.println("이름 입력 >> ");
// BufferedReader.readLine() : 대량의 문자데이터를 읽어 문자열로 반환하는 메소드
String name = in.readLine();
System.out.println("태어난 년도 입력 >> ");
// 키보드로 입력받은 문자열을 정수값으로 변환하여 저장 - NumberFormatException 발생
int birthYear = Integer.parseInt(in.readLine());
int age = Calendar.getInstance().get(Calendar.YEAR) - birthYear + 1;
System.out.println("[결과]" + name + "님의 나이는" + age + "살 입니다.");
}
}
FileApp
package xyz.itwill.io;
import java.io.File;
import java.io.IOException;
// File 클래스 : 파일 관련 정보를 저장하기위한 클래스
public class FileApp {
public static void main(String[] args) throws IOException {
// File 클래스의 File(String pathname) 생성자를 이용하여 매개변수로 시스템(OS - 운영체제)의
//파일경로를 전달받아 File 객체 생성
// > 파일경로 : 시스템에 존재하는 파일 위치를 표현하는 방법 - 절대경로 표현방법, 상대경로 표현방법
// 절대경로 표현방법 : 파일경로를 최상위 디랙토리를 기준으로 파일 위치를 표현하는 방법
// 상대경로 표현방법 : 현재 실행 프로그램의 작업 디렉토리를 기준으로 파일 위치를 표현하는 방법
// > 이클립스에서는 프로젝트 폴더를 작업 디렉토리로 처리
// Windows 운영체제에서는 폴더(드라이브)와 파일을 구분하기 위한 \ 문자 사용
// > Java에서는 \ 기호가 회피문자(Escape Character)를 표현하는 용도로 사용
// > \ 기호를 문자로 사용하기 위해 \\ 형태의 회피문자로 표현
File fileOne = new File("c:\\data");
// File.exists() : File 객체에 저장된 파일경로의 파일(디렉토리)이 시스템에 존재하지
// 않을 경우 [false]를 반환하고 존재할 경우 [true]를 반환하는 메소드
if(fileOne.exists()) {
System.out.println("c:\\data 폴더가 이미 존재합니다.");
} else {
// File.mkdir() : File 객체에 저장된 파일경로의 디렉토리(폴더)를 생성하는 메소드
fileOne.mkdir();
System.out.println("c:\\data 폴더를 생성 하였습니다.");
}
c:\data 폴더를 생성 하였습니다.
// File fileTwo=new File("c:\\data\\itwill.txt");
// Windows 운영체제를 제외한 나머지 운영체제에서는 폴더(드라이브)와 파일을 구분하기
// 위해 / 문자 사용 - Java에서는 파일 경로를 표현하기 위한 \ 문자 대신 / 문자 사용 가능
File fileTwo = new File("c:/data/itwill.txt");
if(fileTwo.exists()) {
System.out.println("c:\\data\\itwill.txt 파일이 이미 존재합니다.");
} else {
//File.createNewFile() : File 객체에 저장된 파일경로의 파일을 생성하는 메소드
fileTwo.createNewFile();
System.out.println("c:\\data\\itwill.txt 파일을 생성 하였습니다.");
}
c:\data\itwill.txt 파일을 생성 하였습니다.
// File fileThree=new File("c:/data/itwill.txt");
// File 클래스의 File(String parent, String child) 생성자를 이용하여 매개변수로
// 부모(디렉토리)와 자식(파일)을 따로 전달받아 파일 경로가 저장된 File 객체 생성
File fileThree=new File("c:/data", "itwill.txt");
if(fileThree.exists()) {
//File.delete() : 파일 객체에 저장된 파일경로의 파일을 삭제하는 메소드
fileThree.delete();
System.out.println("c:\\data\\itwill.txt 파일이 삭제 하였습니다.");
} else {
System.out.println("c:\\data\\itwill.txt 파일이 존재하지 않습니다.");
}
c:\data\itwill.txt 파일이 삭제 하였습니다.
// 파일경로를 상대경로 표현방법으로 전달하여 File 객체 생성
// > 현재 프로그램의 작업 디렉토리(프로젝트 폴더)를 기준으로 파일 경로 설정
// > 상대경로 표현방법은 [..] 기호를 사용하여 상위 디렉토리를 표현하며 [파일]
//형식으로 작업 디렉토리에 존재하는 파일이나 하위 디렉토리 표현
File fileFour = new File("src");
if(fileFour.exists()) {
// File.toString() : File 객체에 저장된 파일경로를 문자열로 반환하는 메소드
// System.out.println("파일경로 = "+fileFour.toString());
System.out.println("파일경로 = "+fileFour);//참조변수를 출력할 경우 toString() 메소드 자동 호출
// File.getAbsolutePath() : File 객체에 저장된 파일경로를 절대경로 표현방법의
// 문자열로 반환하는 메소드
System.out.println("파일경로 = "+fileFour.getAbsolutePath());
} else {
System.out.println("작업폴더에 [src] 폴더가 없습니다.");
}
파일경로 = src
파일경로 = C:\Users\000000\git\java\Java_3\src
File fileFive = new File("c:/");
// File.isDirectory() : File 객체에 저장된 파일경로의 파일이 디렉토리가 아닌 경우
// [false]를 반환하고 디렉토리인 경우 [true]를 반환하는 메소드
if(fileFive.isDirectory()) {
// File.listFiles() : File 객체에 저장된 파일경로의 디렉토리의 파일이나 하위
// 디렉토리 목록을 File 객체 배열로 반환하는 메소드
File[] subFiles = fileFive.listFiles();
System.out.println(fileFive+" 폴더의 자식 목록 >> ");
for(File file : subFiles) {
// File.isFile() : File 객체에 저장된 파일경로의 파일이 일반파일이 아닌 경우
// [false]를 반환하고 일반파일인 경우 [true]를 반환하는 메소드
if(file.isFile()) {
System.out.println("파일 = "+file);
} else {
System.out.println("폴더 = "+file);
}
}
}
c:\ 폴더의 자식 목록 >>
폴더 = c:\$Recycle.Bin
폴더 = c:\$WinREAgent
폴더 = c:\data
폴더 = c:\Documents and Settings
파일 = c:\DumpStack.log.tmp
파일 = c:\hiberfil.sys
폴더 = c:\Java
파일 = c:\pagefile.sys
폴더 = c:\PerfLogs
폴더 = c:\Program Files
폴더 = c:\Program Files (x86)
폴더 = c:\ProgramData
폴더 = c:\Recovery
파일 = c:\swapfile.sys
폴더 = c:\System Volume Information
폴더 = c:\Users
폴더 = c:\Windows
FileOutputStramApp
package xyz.itwill.io;
import java.io.FileOutputStream;
import java.io.IOException;
// 키보드로 입력된 값을 원시데이타로 제공받아 파일로 전달하여 저장하는 프로그램 작성
// > EOF(End Of File : 입력종료 - Ctrl+Z) 신호를 입력하면 프로그램 종료
public class FileOutputSteamApp {
public static void main(String[] args) throws IOException {
System.out.println("[메세지]키보드를 눌러 값을 입력해 주세요.[프로그램 종료 : Ctrl+Z]");
// FileOutputStream 클래스 : 파일에 원시데이타를 전달하기 위한 출력스트림을 생성하기 위한 클래스
// > FileOutputStream 클래스의 FileOutputStream(String name) 생성자를 이용하여
// 매개변수로 파일경로를 전달받아 파일 출력스트림 생성
// > 매개변수로 전달받은 파일경로의 파일이 없는 경우 FileNotFoundException 발생
// > 예외처리를 하지 않고 예외를 전달할 경우 매개변수로 전달받은 파일경로의 파일을 자동으로 생성하여 출력스트림 제공
// > 매개변수로 전달받은 파일경로의 파일이 있는 경우 기존 파일의 내용 대신 새로운 내용이 파일에 저장 - 덮어씌우기(OverWrite)
// FileOutputStream out=new FileOutputStream("c:/data/byte.txt");
// FileOutputStream 클래스의 FileOutputStream(String name, boolean append) 생성자를
// 이용하여 매개변수로 파일경로와 내용 추가에 대한 상태값을 전달받아 파일 출력스트림 생성
// > false : 파일 내용 덮어씌우기(기본), true : 파일 내용 이어쓰기
FileOutputStream out=new FileOutputStream("c:/data/byte.txt",true);
int readByte;
while(true) {
// 키보드 입력스트림에 존재하는 입력값을 원시데이타로 반환받아 저장
readByte=System.in.read();
if(readByte==-1) break;
// 파일 출력스트림으로 원시데이타를 전달하여 저장 - SAVE
out.write(readByte);
}
// FileOutputStream.close() : 파일 출력스트림을 제거하는 메소드 > 파일에는 입력스트림과 출력스트림을 하나씩만 생성 가능
out.close();
System.out.println("c:\\data\\byte.txt 파일을 확인해 보세요.");
}
}
[메세지]키보드를 눌러 값을 입력해 주세요.[프로그램 종료 : Ctrl+Z]
FileInputStreamApp
package xyz.itwill.io;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
// 파일에 저장된 값을 원시데이타로 제공받아 모니터에 전달하여 출력하는 프로그램 작성
public class FileInputStreamApp {
public static void main(String[] args) throws IOException {
// FileInputStram 클래스 : 파일에 저장된 값을 원시 데이터를 제공받기 위한 입력 스트림을 생성하기 위한 클래스
FileInputStream in = null;
try {
// FileInputStram 클래스의 FileInputStream(String name) 생성자를 이용하여 매개변수
// 파일경로를 제공받아 파일 입력스트림을 생성
// > 매개변수로 전달받은 파일경로의 파일이 없는 경우 FileNotFoundException 발생
// > 파일이 없으면 파일 입력 스트림을 생성할 수 없으므로 반드시 예외처리
in = new FileInputStream("c:/data/byte/txt");
} catch (FileNotFoundException e) {
System.out.println("[에러]c:\\data\\byte.txt 파일을 찾을 수 없습니다.");
System.exit(0);
}
System.out.println("[메세지]c: \\\\ data\\\\byte.txt 파일에 저장된 내용입니다.");
int readByte;
while (true) {
// 파일 입력 스트림을 이용하여 파일에 저장된 값을 원시데이터로 반환받아 저장
readByte = in.read();
// 파일 입력스트림으로 제공받을 파일 내용이 없는 경우 반복문 종료
if (readByte == -1)
break;
// 원시데이터를 모니터 출력스트림으로 전달하여 출력
System.out.write(readByte);
}
// FileInputStream.close() : 파일 입력스트림을 제거하는 메소드
in.close();
}
}
[에러]c:\data\byte.txt 파일을 찾을 수 없습니다.
FileWriterApp
package xyz.itwill.io;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
// 키보드로 입력된 값을 문자데이타로 제공받아 파일로 전달하여 저장하는 프로그램 작성
// > EOF(End Of File : 입력종료 - Ctrl+Z) 신호를 입력하면 프로그램 종료
public class FileWriterApp {
public static void main(String[] args) throws IOException {
System.out.println("[메세지]키보드를 눌러 값을 입력해 주세요.[프로그램 종료 : Ctrl+Z]");
// 키보드 입력스트림을 InputStreamReader 클래스의 입력스트림으로 확장
// > 원시데이타가 아닌 문자데이타를 입력받기 위한 입력스트림
InputStreamReader in=new InputStreamReader(System.in);
// FileWriter 클래스 : 파일에 문자데이타를 전달하기 위한 출력스트림을 생성하기 위한 클래스
// > FileWriter 클래스의 FileWriter(String name) 생성자를 이용하여 매개변수로
// 파일경로를 전달받아 파일 출력스트림 생성
// > 매개변수로 전달받은 파일경로의 파일이 없는 경우 FileNotFoundException 발생
// > 예외처리를 하지 않고 예외를 전달할 경우 매개변수로 전달받은 파일경로의 파일을 자동으로 생성하여 출력스트림 제공
// > 매개변수로 전달받은 파일경로의 파일이 있는 경우 기존 파일의 내용 대신 새로운
// 내용이 파일에 저장 - 덮어씌우기(OverWrite)
// FileWriter out=new FileWriter("c:/data/char.txt");
FileWriter out = new FileWriter("c:/data/char.txt",true);
int readByte;
while(true) {
readByte=in.read();
if(readByte==-1) break;
out.write(readByte);
}
// FileWriter.close() : 파일 출력스트림을 제거하는 메소드
out.close();
System.out.println("c:\\data\\char.txt 파일을 확인해 보세요.");
}
}
[메세지]키보드를 눌러 값을 입력해 주세요.[프로그램 종료 : Ctrl+Z]
FileCopyByteApp
package xyz.itwill.io;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
// 원본파일에 저장된 값을 원시데이타로 읽어 타겟파일에 전달하여 저장하는 프로그램 작성 - 파일 복사 프로그램
// > 모든 형식의 원본파일을 복사하여 타겟파일로 전달하여 저장 가능
public class FileCopyByteApp {
public static void main(String[] args) throws IOException {
// 보조 스트림 클래스 : 기존 스트림을 전달받아 기능을 확장하기 위한 스트림 클래스
// > BufferedInputStream, BufferedOutputStream, DataInputStream, DataOutputStream 등
// BufferedInputStream 클래스 : InputStream 객체를 전달받아 대량의 원시데이타를 읽기 위한 입력스트림을 생성하기 위한 클래스
BufferedInputStream in = null;
// BufferedOutputStream 클래스 : OutputStream 객체를 전달받아 대량의 원시데이타를 전달하기 위한 출력스트림을 생성하기 위한 클래스
BufferedOutputStream out = null;
try {
// 원본파일의 값을 원시데이타로 읽기 위한 입력스트림을 생성하여 저장
in = new BufferedInputStream(new FileInputStream("c:/data/bandizip.exe"));
// 타겟파일에 원시데이타를 전달하여 저장하기 위한 출력스트림을 생성하여 저장
out = new BufferedOutputStream(new FileOutputStream("c:/data/bandizip_byte.exe"));
int readByte;
// 원본파일의 값을 원시데이타로 읽어 타겟파일로 전달하는 반복문 - 파일내용 복사
while(true) {
readByte = in.read();
if(readByte == -1) break;
out.write(readByte);
}
System.out.println("[메세지]파일을 성공적으로 복사 하였습니다.");
} catch (FileNotFoundException e) {
System.out.println("[에러]원본파일을 찾을 수 없습니다.");
} finally {
in.close();
out.close();
}
}
}
[에러]원본파일을 찾을 수 없습니다.
FileCopyCharApp
package xyz.itwill.io;
import java.io.*;
// 원본파일에 저장된 값을 문자데이터로 읽어 타겟파일에 전달하여 저장하는 프로그램 작성 - 파일
// > 텍스트 형식의 원본파일(문서파일)을 복사하여 타겟파일로 전달하여 저장 가능
// > 텍스트 형식의 파일을 제외한 원본파일 (이진파일 - Binary File)은 값이 대한 인코딩 처리에 의해 타겟파일에 변경된 값이 전달되어 저장
public class FileCopyCharApp {
public static void main(String[] args) throws IOException {
// BufferedReader 클래스 : Reader 객체를 전달받아 대량의 문자데이터를 읽기 위한 입력스트림을 생성하기위한 클래스
BufferedReader in = null;
// BufferedWriter클래스 : Writer객체를 전달받아 대량의 문자데이터를 전달하기 위한 풀력스트림을 생성하기 위한 클래스
BufferedWriter out = null;
try {
in = new BufferedReader(new FileReader("c:/data/bandizip.exe"));
out = new BufferedWriter(new FileWriter("c:/data/bandizip_char.exe"));
int readByte;
while(true) {
readByte = in.read();
if(readByte == -1) break;
out.write(readByte);
}
System.out.println("[메세지]파일을 성공적으로 복사 하였습니다.");
} catch (FileNotFoundException e) {
System.out.println("[에러]원본파일을 찾을 수 없습니다.");
} finally {
in.close();
out.close();
}
}
}
[에러]원본파일을 찾을 수 없습니다.
DataOutputStream
import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DataOutputStreamApp {
public static void main(String[] args) throws IOException {
// DataOutputStream 클래스 : OutputStream 객체를 전달받아 원하는 자료형의 값을 원시
// 데이타로 전달하기 위한 기능의 출력스트림을 생성하기 위한 클래스
DataOutputStream out=new DataOutputStream(new FileOutputStream("c:/data/data.txt"));
// DataOutputStream.writeInt(int v) : 매개변수로 정수값을 전달받아 원시데이타로 변환 하여 출력스트림으로 전달하는 메소드
out.writeInt(100);
// DataOutputStream.writeBoolean(boolean v) : 매개변수로 논리값을 전달받아 원시데이터로 변환하여 출력스트림으로 전달하는 메소드
out.writeBoolean(true);
// DataOutputStream.writeUTF(String v) : 매개변수로 문자열을 전달받아 원시데이터로 변환하여 출력스트림으로 전달하는 메소드
out.writeUTF("홍길동");
out.close();
System.out.println("c:\\data\\data.txt 파일을 확인해 보세요.");
}
}
c:\data\data.txt 파일을 확인해 보세요.
DataInputStreamApp
package xyz.itwill.io;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class DataInputStreamApp {
public static void main(String[] args) throws IOException {
// DataInputStream 클랫, : InputStram 객체를 전달받아 원시데이터를 원하는 자료형의 값으로
// 변환하여 제공하기 위한 기능의 입력스트림을 생성하기 위한 클래스
DataInputStream in = new DataInputStream(new FileInputStream("c:/data/data.txt"));
// 반드시 파일에 저장된 자료형의 순서대로 값을 읽어서 사용
// DataInputStream.readInt() : 입력스트림으로 원시데이타를 읽어 정수값으로 반환하는 메소드
int value1=in.readInt();
// DataInputStream.readBoolean() : 입력스트림으로 원시데이타를 읽어 논리값으로 반환하는 메소드
boolean value2=in.readBoolean();
// DataInputStream.readUTF() : 입력스트림으로 원시데이타를 읽어 문자열로 반환하는 메소드
String value3=in.readUTF();
System.out.println("value1 = "+value1);
System.out.println("value2 = "+value2);
System.out.println("value3 = "+value3);
in.close();
}
}
value1 = 100
value2 = true
value3 = 홍길동
ObjectOutputStreamApp
package xyz.itwill.io;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Arrays;
import java.util.Date;
public class ObjectOutputStreamApp {
public static void main(String[] args) throws IOException {
// ObjectOutputStream 클래스 : OutputStream 객체를 전달받아 Java 객체를 원시데이터로
// 전달하는 출력스트림을 생성하기 위한 클래스
ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("c:/data/object.txt"));
// ObjectOutputStream.writeObject(Object o) : 매개변수로 전달받은 객체를 원시데이타로
// 변환하여 출력스트림으로 전달하는 메소드
out.writeObject("홍길동"); // String 객체
out.writeObject(new Date()); // Date 객체
out.writeObject(Arrays.asList("임꺽정","전우치","일지매","장길산")); // List 객체
out.close();
System.out.println("c:\\data\\object.txt 파일을 확인해 보세요.");
}
}
c:\data\object.txt 파일을 확인해 보세요.
ObjectInputStreamApp
package xyz.itwill.io;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Date;
import java.util.List;
public class ObjectInputStreamApp {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// ObjectInputStream 클래스 : InputStream 객체를 전달받아 원시데이타를 Java 객체로 제공받기 위한
// 입력스트림을 생성하기 위한 클래스
ObjectInputStream in=new ObjectInputStream(new FileInputStream("c:/data/object.txt"));
// ObjectInputStream.readObject() : 입력스트림으로 원시데이타를 제공받아 Java 객체로 변환하여 반환하는 메소드
// > Object 타입의 객체로 반환되므로 반드시 명시적 객체 형변환 사용
// > 반환되는 객체에 대한 클래스가 없는 경우 ClassNotFoundException 발생
String string=(String)in.readObject();
Date date=(Date)in.readObject();
@SuppressWarnings("unchecked")
List<String> list=(List<String>)in.readObject();
System.out.println("string = "+string);
System.out.println("date = "+date);
System.out.println("list = "+list);
in.close();
}
}
string = 홍길동
date = Tue Apr 25 18:06:38 KST 2023
list = [임꺽정, 전우치, 일지매, 장길산]