package CHAPTER13;

import java.io.*;

public class LAB01_FileCopyProgram {
    public static void main(String[] args) {
        // 원본 파일과 대상 파일 경로 설정  /Volumes/MSJ_SSD/JOBS/03. Book Job(Major)/자바/JavaWorkspace/JavaMaster/src/CHAP14
        String sourceFilePath = "/Volumes/MSJ_SSD/JOBS/03. Book Job(Major)/자바/JavaWorkspace/JavaMaster/src/CHAP14/source.txt";  // 복사할 원본 파일
        String destinationFilePath1 = "/Volumes/MSJ_SSD/JOBS/03. Book Job(Major)/자바/JavaWorkspace/JavaMaster/src/CHAP14/copy_byte.txt";  // 바이트 스트림 복사본
        String destinationFilePath2 = "/Volumes/MSJ_SSD/JOBS/03. Book Job(Major)/자바/JavaWorkspace/JavaMaster/src/CHAP14/copy_char.txt";  // 문자 스트림 복사본

        // 바이트 스트림을 이용한 파일 복사
        copyFileUsingByteStream(sourceFilePath, destinationFilePath1);

        // 문자 스트림을 이용한 파일 복사
        copyFileUsingCharStream(sourceFilePath, destinationFilePath2);
    }

    // 1. 바이트 스트림을 사용하여 파일 복사 (모든 유형의 파일 가능)
    public static void copyFileUsingByteStream(String source, String destination) {
        try (FileInputStream fis = new FileInputStream(source);
             FileOutputStream fos = new FileOutputStream(destination)) {

            byte[] buffer = new byte[1024]; // 1KB 버퍼
            int bytesRead;
            
            while ((bytesRead = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, bytesRead);
            }

            System.out.println("바이트 스트림을 이용한 파일 복사 완료: " + destination);
        } catch (IOException e) {
            System.out.println("파일 복사 오류 (바이트 스트림): " + e.getMessage());
        }
    }

    // 2. 문자 스트림을 사용하여 파일 복사 (텍스트 파일 전용)
    public static void copyFileUsingCharStream(String source, String destination) {
        try (FileReader fr = new FileReader(source);
             FileWriter fw = new FileWriter(destination)) {

            char[] buffer = new char[1024]; // 1KB 문자 버퍼
            int charsRead;

            while ((charsRead = fr.read(buffer)) != -1) {
                fw.write(buffer, 0, charsRead);
            }

            System.out.println("문자 스트림을 이용한 파일 복사 완료: " + destination);
        } catch (IOException e) {
            System.out.println("파일 복사 오류 (문자 스트림): " + e.getMessage());
        }
    }
}
