[java] 파일 압축 및 압축 해제 오류 처리하기

Java에서 파일을 압축하고 압축을 해제하는 과정에서 오류가 발생할 수 있습니다. 이러한 오류를 처리하기 위해 Exception 처리를 적절하게 해주어야 합니다. 이번 포스트에서는 파일 압축 및 압축 해제 오류 처리에 대해 알아보겠습니다.

1. 파일 압축하기

파일을 압축하기 위해 java.util.zip 패키지의 ZipOutputStream 클래스를 사용할 수 있습니다. 다음은 파일을 압축하는 예제 코드입니다.

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class FileCompressionExample {
    public static void compressFile(String inputFile, String outputFile) {
        try (FileInputStream fis = new FileInputStream(inputFile);
             FileOutputStream fos = new FileOutputStream(outputFile);
             ZipOutputStream zipOut = new ZipOutputStream(fos)) {

            File fileToCompress = new File(inputFile);
            ZipEntry zipEntry = new ZipEntry(fileToCompress.getName());
            zipOut.putNextEntry(zipEntry);

            byte[] bytes = new byte[1024];
            int length;
            while ((length = fis.read(bytes)) >= 0) {
                zipOut.write(bytes, 0, length);
            }

            zipOut.closeEntry();
        } catch (IOException e) {
            e.printStackTrace();
            // 압축 오류 처리
        }
    }

    public static void main(String[] args) {
        String inputFile = "input.txt";
        String outputFile = "output.zip";
        compressFile(inputFile, outputFile);
    }
}

위 코드에서는 compressFile 메소드를 통해 파일을 압축하고 있습니다. ZipOutputStream 클래스를 사용하여 압축 파일에 ZipEntry를 추가하고, 파일의 내용을 읽어 압축 파일에 쓰는 과정을 반복합니다. 에러 발생 시 IOException을 처리하고 있습니다.

2. 파일 압축 해제하기

압축된 파일을 해제하기 위해 java.util.zip 패키지의 ZipInputStream 클래스를 사용할 수 있습니다. 다음은 파일을 압축 해제하는 예제 코드입니다.

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class FileDecompressionExample {
    public static void decompressFile(String inputFile, String outputDirectory) {
        try (FileInputStream fis = new FileInputStream(inputFile);
             ZipInputStream zipIn = new ZipInputStream(fis)) {

            byte[] buffer = new byte[1024];
            ZipEntry entry;
            while ((entry = zipIn.getNextEntry()) != null) {
                String entryName = entry.getName();
                String filePath = outputDirectory + File.separator + entryName;
                if (entry.isDirectory()) {
                    File dir = new File(filePath);
                    dir.mkdirs();
                } else {
                    try (FileOutputStream fos = new FileOutputStream(filePath)) {
                        int length;
                        while ((length = zipIn.read(buffer)) > 0) {
                            fos.write(buffer, 0, length);
                        }
                    }
                }
                zipIn.closeEntry();
            }

        } catch (IOException e) {
            e.printStackTrace();
            // 압축 해제 오류 처리
        }
    }

    public static void main(String[] args) {
        String inputFile = "input.zip";
        String outputDirectory = "output";
        decompressFile(inputFile, outputDirectory);
    }
}

위 코드에서는 decompressFile 메소드를 통해 파일을 압축 해제하고 있습니다. ZipInputStream 클래스를 사용하여 압축 파일의 내용을 읽어 압축 해제할 파일을 생성하고 있습니다. 에러 발생 시 IOException을 처리하고 있습니다.

3. 오류 처리

파일 압축 및 압축 해제 과정에서 발생하는 오류는 주로 IOException이며 파일 입출력 관련 문제가 가장 흔합니다. 이 경우 try-catch 문을 사용하여 예외를 처리해야 합니다.

위 예제 코드에서는 간단히 e.printStackTrace()를 통해 오류 메시지를 출력하도록 처리하였습니다. 실제 상황에 맞게 처리 방식을 결정하시면 됩니다.

4. 결론

Java를 사용하여 파일 압축 및 압축 해제를 수행할 때, 예외 처리를 적절하게 해주어야 합니다. 압축 파일의 사이즈가 큰 경우 등 다양한 상황에서 예외가 발생할 수 있으므로, 이를 고려하여 오류 처리를 신경써야 합니다.