본문 바로가기

3월 ~ 5월) 자바/java

20Day - (입출력스트림)ByteStreamApp / CharacterStreamApp / ConsoleIOApp / FileApp / FileOutputStramApp & FileInputStreamApp / FileWriterApp / FileCopyByteApp / FileCopyCharApp / DataOutputStream & DataInputStreamApp / ObjectOutputStreamApp & Obje..

ByteStreamApp

package xyz.itwill.io;
// java.io 패키지 : 입력과 출력 관련 클래스가 선언된 패키지

// 스트림(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 = [임꺽정, 전우치, 일지매, 장길산]