๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์ž๋ฐ”๋กœ ํด๋”(๋””๋ ‰ํ† ๋ฆฌ),ํŒŒ์ผ ๋ณต์‚ฌํ•˜๊ธฐ

by 5566 2023. 10. 1.

1. ํด๋”(๋””๋ ‰ํ† ๋ฆฌ)์™€ ํŒŒ์ผ ๋ณต์‚ฌ์˜ ๊ฐœ๋… ์ดํ•ด

ํŒŒ์ผ๊ณผ ํด๋”(๋””๋ ‰ํ† ๋ฆฌ) ๋ณต์‚ฌ๋Š” ์ปดํ“จํ„ฐ์—์„œ ์ค‘์š”ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ํด๋” ๋ณต์‚ฌ๋Š” ํ•ด๋‹น ํด๋”์™€ ๊ทธ ์•ˆ์— ํฌํ•จ๋œ ๋ชจ๋“  ํŒŒ์ผ ๋ฐ ํ•˜์œ„ ํด๋”๋“ค์„ ๋Œ€์ƒ ํด๋”์— ๋ณต์ œํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ํด๋”์— ์ด๋ฏธ ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ์ผ ๋˜๋Š” ํด๋”๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ํ•ด๋‹น ํŒŒ์ผ๋“ค์ด ๋ฎ์–ด์“ฐ์—ฌ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋ณต์‚ฌ๋Š” ๋‹จ์ผ ํŒŒ์ผ์„ ์›๋ณธ ํŒŒ์ผ์—์„œ ๋Œ€์ƒ ํŒŒ์ผ๋กœ ๋ณต์ œํ•˜๋Š” ์ž‘์—…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ ๋ณต์‚ฌ ์—ญ์‹œ ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์ด๋ฏธ ๋Œ€์ƒ ์œ„์น˜์— ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ์—ฌ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณต์‚ฌ ์ž‘์—…์€ ๋ฐ์ดํ„ฐ ๋ฐฑ์—…, ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ ๋ณ€๊ฒฝ, ํŒŒ์ผ์„ ๋‹ค๋ฅธ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ž๋ฐ”์—์„œ ํด๋”์™€ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

2. ์ž๋ฐ”์—์„œ ํด๋”(๋””๋ ‰ํ† ๋ฆฌ) ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ž๋ฐ”์—์„œ ํด๋”(๋””๋ ‰ํ† ๋ฆฌ)๋ฅผ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜์—ฌ ํด๋”์™€ ํŒŒ์ผ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. JDK 7๋ถ€ํ„ฐ๋Š” java.nio.file ํŒจํ‚ค์ง€์—์„œ Files ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋”๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ ์˜ˆ์‹œ๋Š” Files.copy() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋”๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

import java.io.IOException;
import java.nio.file.*;

public class FolderCopyExample {
    public static void main(String[] args) {
        Path sourcePath = Paths.get("C:/source_folder"); // ๋ณต์‚ฌํ•  ํด๋” ๊ฒฝ๋กœ
        Path targetPath = Paths.get("C:/target_folder"); // ๋Œ€์ƒ ํด๋” ๊ฒฝ๋กœ

        try {
            // ํด๋” ๋ณต์‚ฌ
            Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
            System.out.println("ํด๋” ๋ณต์‚ฌ ์™„๋ฃŒ");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

์œ„์˜ ์ฝ”๋“œ์—์„œ sourcePath๋Š” ๋ณต์‚ฌํ•  ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ณ , targetPath๋Š” ๋ณต์‚ฌํ•œ ํด๋”๋ฅผ ์ €์žฅํ•  ๋Œ€์ƒ ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. Files.copy() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋”๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. StandardCopyOption.REPLACE_EXISTING ์˜ต์…˜์€ ๋Œ€์ƒ ํด๋”์— ์ด๋ฏธ ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด๋‚˜ ํด๋”๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ๋„๋ก ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ๋ณต์‚ฌ ์ž‘์—… ์ค‘์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด IOException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํด๋” ๋ณต์‚ฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด "ํด๋” ๋ณต์‚ฌ ์™„๋ฃŒ"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ž๋ฐ”์—์„œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

3. ์ž๋ฐ”์—์„œ ํŒŒ์ผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ž๋ฐ”์—์„œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜์—ฌ ํŒŒ์ผ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. JDK 7๋ถ€ํ„ฐ๋Š” java.nio.file ํŒจํ‚ค์ง€์—์„œ Files ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ ์˜ˆ์‹œ๋Š” Files.copy() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

import java.io.IOException;
import java.nio.file.*;

public class FileCopyExample {
    public static void main(String[] args) {
        Path sourcePath = Paths.get("C:/source_file.txt"); // ๋ณต์‚ฌํ•  ํŒŒ์ผ ๊ฒฝ๋กœ
        Path targetPath = Paths.get("C:/target_file.txt"); // ๋Œ€์ƒ ํŒŒ์ผ ๊ฒฝ๋กœ

        try {
            // ํŒŒ์ผ ๋ณต์‚ฌ
            Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
            System.out.println("ํŒŒ์ผ ๋ณต์‚ฌ ์™„๋ฃŒ");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

์œ„์˜ ์ฝ”๋“œ์—์„œ sourcePath๋Š” ๋ณต์‚ฌํ•  ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ณ , targetPath๋Š” ๋ณต์‚ฌํ•œ ํŒŒ์ผ์„ ์ €์žฅํ•  ๋Œ€์ƒ ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. Files.copy() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. StandardCopyOption.REPLACE_EXISTING ์˜ต์…˜์€ ๋Œ€์ƒ ํŒŒ์ผ์— ์ด๋ฏธ ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๋ฎ์–ด์“ฐ๋„๋ก ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค. ๋ณต์‚ฌ ์ž‘์—… ์ค‘์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด IOException์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋ณต์‚ฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด "ํŒŒ์ผ ๋ณต์‚ฌ ์™„๋ฃŒ"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ž๋ฐ”์—์„œ ํด๋”๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

4. ์ž๋ฐ”์—์„œ ํด๋”(๋””๋ ‰ํ† ๋ฆฌ)์™€ ํŒŒ์ผ์„ ๋™์‹œ์— ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ž๋ฐ”์—์„œ ํด๋”(๋””๋ ‰ํ† ๋ฆฌ)์™€ ํŒŒ์ผ์„ ๋™์‹œ์— ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ ‘๊ทผํ•˜์—ฌ ํด๋”์™€ ํŒŒ์ผ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. JDK 7๋ถ€ํ„ฐ๋Š” java.nio.file ํŒจํ‚ค์ง€์—์„œ Files ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ํด๋”์™€ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ ์˜ˆ์‹œ๋Š” Files.walkFileTree() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋”์™€ ํŒŒ์ผ์„ ๋™์‹œ์— ๋ณต์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

public class FolderAndFileCopyExample {
    public static void main(String[] args) {
        Path sourcePath = Paths.get("C:/source_folder"); // ๋ณต์‚ฌํ•  ํด๋” ๊ฒฝ๋กœ
        Path targetPath = Paths.get("C:/target_folder"); // ๋Œ€์ƒ ํด๋” ๊ฒฝ๋กœ

        try {
            // ํด๋”์™€ ํŒŒ์ผ ๋ณต์‚ฌ
            Files.walkFileTree(sourcePath, new FileCopyVisitor(sourcePath, targetPath));
            System.out.println("ํด๋”์™€ ํŒŒ์ผ ๋ณต์‚ฌ ์™„๋ฃŒ");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class FileCopyVisitor extends SimpleFileVisitor<Path> {
    private Path sourcePath;
    private Path targetPath;

    public FileCopyVisitor(Path sourcePath, Path targetPath) {
        this.sourcePath = sourcePath;
        this.targetPath = targetPath;
    }

    @Override
    public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
        Path targetDir = targetPath.resolve(sourcePath.relativize(dir));
        Files.createDirectories(targetDir);
        return FileVisitResult.CONTINUE;
    }

    @Override
    public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
        Files.copy(file, targetPath.resolve(sourcePath.relativize(file)), StandardCopyOption.REPLACE_EXISTING);
        return FileVisitResult.CONTINUE;
    }
}

์œ„์˜ ์ฝ”๋“œ์—์„œ sourcePath๋Š” ๋ณต์‚ฌํ•  ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•˜๊ณ , targetPath๋Š” ๋ณต์‚ฌํ•œ ํด๋”์™€ ํŒŒ์ผ์„ ์ €์žฅํ•  ๋Œ€์ƒ ํด๋”์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํด๋”์™€ ํŒŒ์ผ์„ ๋™์‹œ์— ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด Files.walkFileTree() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋Š” FileVisitor ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋ฅผ ์ธ์ž๋กœ ๋ฐ›์•„์„œ ํŒŒ์ผ ํŠธ๋ฆฌ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ๊ฐ์˜ ํด๋”์™€ ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” FileCopyVisitor ํด๋ž˜์Šค๊ฐ€ FileVisitor ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. SimpleFileVisitor ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. preVisitDirectory() ๋ฉ”์†Œ๋“œ๋Š” ํด๋”๊ฐ€ ๋ฐฉ๋ฌธ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœ๋˜๋ฉฐ, ๋Œ€์ƒ ํด๋”์— ๋™์ผํ•œ ํด๋” ๊ตฌ์กฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. visitFile() ๋ฉ”์†Œ๋“œ๋Š” ๊ฐ๊ฐ์˜ ํŒŒ์ผ์ด ๋ฐฉ๋ฌธ๋  ๋•Œ ํ˜ธ์ถœ๋˜๋ฉฐ, ํŒŒ์ผ์„ ๋Œ€์ƒ ํด๋”์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํด๋”์™€ ํŒŒ์ผ ๋ณต์‚ฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด "ํด๋”์™€ ํŒŒ์ผ ๋ณต์‚ฌ ์™„๋ฃŒ"๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ž๋ฐ”์—์„œ ํด๋” ๋˜๋Š” ํŒŒ์ผ์„ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

5. ๋ณต์‚ฌ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•

ํŒŒ์ผ ๋ณต์‚ฌ ๊ณผ์ •์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์˜ˆ์™ธ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ณต์‚ฌํ•  ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜, ๋Œ€์ƒ ํŒŒ์ผ์— ์ด๋ฏธ ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์žˆ์„ ๊ฒฝ์šฐ ๋“ฑ์ด ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์—์„œ๋Š” ๋ณต์‚ฌ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ถ€ ์˜ˆ์™ธ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

import java.io.IOException;
import java.nio.file.*;

public class FileCopyExample {
    public static void main(String[] args) {
        Path sourcePath = Paths.get("C:/source_file.txt"); // ๋ณต์‚ฌํ•  ํŒŒ์ผ ๊ฒฝ๋กœ
        Path targetPath = Paths.get("C:/target_file.txt"); // ๋Œ€์ƒ ํŒŒ์ผ ๊ฒฝ๋กœ

        try {
            Files.copy(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
            System.out.println("ํŒŒ์ผ ๋ณต์‚ฌ ์™„๋ฃŒ");
        } catch (NoSuchFileException e) {
            System.err.println("๋ณต์‚ฌํ•  ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
        } catch (FileAlreadyExistsException e) {
            System.err.println("๋Œ€์ƒ ํŒŒ์ผ์— ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.");
        } catch (IOException e) {
            System.err.println("ํŒŒ์ผ ๋ณต์‚ฌ ์ค‘์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.");
            e.printStackTrace();
        }
    }
}

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” try-catch ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, NoSuchFileException์€ ๋ณต์‚ฌํ•  ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ๋ณต์‚ฌํ•  ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, ํ•ด๋‹น ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. FileAlreadyExistsException์€ ๋Œ€์ƒ ํŒŒ์ผ์— ์ด๋ฏธ ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋™์ผํ•œ ์ด๋ฆ„์˜ ํŒŒ์ผ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด, ์ด ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ , IOException์€ ํŒŒ์ผ ๋ณต์‚ฌ ์ค‘์— ๋‹ค๋ฅธ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ ๋ณต์‚ฌ ์ค‘์— ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ด๋‹น ์˜ˆ์™ธ๊ฐ€ ์ถœ๋ ฅ๋˜๊ณ  ์˜ˆ์™ธ์˜ ๋ฐœ์ƒ ์›์ธ๋„ ํ•จ๊ป˜ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€์ ์ธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋Š” ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ์š”๊ตฌ์‚ฌํ•ญ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ณต์‚ฌํ•œ ํŒŒ์ผ์˜ ๊ถŒํ•œ ์„ค์ •, ๋ณต์‚ฌ ๋Œ€์ƒ ํด๋”์˜ ์ƒ์„ฑ ๋“ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€