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

파일을 압축하거나 압축 해제할 때 오류가 발생할 수 있습니다. 이러한 오류를 효과적으로 처리하는 방법을 알아보겠습니다.

1. 파일 압축 오류 처리하기

파일을 압축하는 과정에서 발생할 수 있는 오류를 처리하기 위해서는 예외 처리를 해야합니다. 가장 일반적인 오류는 파일을 찾을 수 없거나 액세스 권한이 없는 경우입니다. 이럴 경우 ZipExceptionIOException을 처리해주어야 합니다.

아래는 파일을 압축하는 예제 코드입니다.

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 FileCompressor {

    public void compressFile(String sourcePath, String destinationPath) {
        try {
            FileOutputStream fos = new FileOutputStream(destinationPath);
            ZipOutputStream zipOut = new ZipOutputStream(fos);
            
            File fileToCompress = new File(sourcePath);
            FileInputStream fis = new FileInputStream(fileToCompress);

            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);
            }

            fis.close();
            zipOut.close();
            fos.close();

            System.out.println("파일이 압축되었습니다.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        FileCompressor compressor = new FileCompressor();
        compressor.compressFile("path/to/source/file.txt", "path/to/destination/archive.zip");
    }
}

2. 파일 압축 해제 오류 처리하기

파일을 압축 해제하는 과정에서 발생할 수 있는 오류를 처리하기 위해서는 역시 예외 처리를 해주어야 합니다. 일반적인 오류는 압축 파일이 손상된 경우입니다. ZipExceptionIOException을 처리해줄 수 있습니다.

아래는 파일을 압축 해제하는 예제 코드입니다.

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.ZipInputStream;

public class FileDecompressor {

    public void decompressFile(String sourcePath, String destinationPath) {
        try {
            FileInputStream fis = new FileInputStream(sourcePath);
            ZipInputStream zipIn = new ZipInputStream(fis);
            
            File destinationDirectory = new File(destinationPath);
            if (!destinationDirectory.exists()) {
                destinationDirectory.mkdirs();
            }

            ZipEntry entry = zipIn.getNextEntry();
            while (entry != null) {
                String filePath = destinationDirectory.getAbsolutePath() + File.separator + entry.getName();
                if (!entry.isDirectory()) {
                    extractFile(zipIn, filePath);
                } else {
                    File dir = new File(filePath);
                    dir.mkdirs();
                }

                zipIn.closeEntry();
                entry = zipIn.getNextEntry();
            }

            zipIn.close();
            fis.close();

            System.out.println("파일이 압축 해제되었습니다.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void extractFile(ZipInputStream zipIn, String filePath) throws IOException {
        FileOutputStream fos = new FileOutputStream(filePath);
        byte[] bytes = new byte[1024];
        int length;
        while ((length = zipIn.read(bytes)) >= 0) {
            fos.write(bytes, 0, length);
        }
        fos.close();
    }

    public static void main(String[] args) {
        FileDecompressor decompressor = new FileDecompressor();
        decompressor.decompressFile("path/to/source/archive.zip", "path/to/destination/folder");
    }
}

위 코드에서는 압축 해제할 파일의 경로와 압축을 해제한 파일이 저장될 경로를 인자로 전달합니다.

참고 자료