[java] 자바에서 압축 해제 후 파일의 압축 비율 복원하기

파일을 압축해제한 후 압축 비율을 복원하는 것은 자바에서 많이 사용되는 작업입니다. 이 작업은 파일이나 디렉터리의 압축률을 분석하고, 압축된 데이터의 크기와 실제 크기 간의 비율을 계산하여 알려줍니다. 이번 블로그에서는 이러한 작업을 자바 코드를 사용하여 어떻게 수행하는지 알아보겠습니다.

1. 압축 비율 복원을 위한 압축 해제

압축 비율을 복원하기 위해서는 먼저 파일을 압축해제해야 합니다. 자바에서는 java.util.zip 패키지를 사용하여 압축 파일을 해제할 수 있습니다. 다음은 간단한 예제 코드입니다.

import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnzipFile {
    public static void main(String[] args) {
        try {
            String zipFilePath = "example.zip";
            String destDirectory = "output";

            byte[] buffer = new byte[1024];
            ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFilePath));
            ZipEntry zipEntry = zis.getNextEntry();

            while (zipEntry != null) {
                String fileName = zipEntry.getName();
                File newFile = new File(destDirectory + File.separator + fileName);

                new File(newFile.getParent()).mkdirs();

                FileOutputStream fos = new FileOutputStream(newFile);
                int len;
                while ((len = zis.read(buffer)) > 0) {
                    fos.write(buffer, 0, len);
                }
                fos.close();
                zipEntry = zis.getNextEntry();
            }
            zis.closeEntry();
            zis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 예제 코드는 java.util.zip.ZipInputStream을 사용하여 example.zip 파일을 압축 해제합니다.

2. 압축 비율 계산

파일을 압축 해제한 후, 압축 비율을 계산할 수 있습니다. 간단하게 압축된 데이터의 크기와 실제 데이터의 크기를 비교하여 압축 비율을 계산할 수 있습니다.

import java.io.File;

public class CompressionRatioCalculator {
    public static void main(String[] args) {
        File compressedFile = new File("example.zip");
        File extractedFile = new File("output");

        long compressedSize = compressedFile.length();
        long extractedSize = getFolderSize(extractedFile);

        double ratio = (double) compressedSize / extractedSize;
        System.out.println("압축률: " + (1 - ratio) * 100 + "%");
    }

    public static long getFolderSize(File folder) {
        long length = 0;
        File[] files = folder.listFiles();

        if (files != null) {
            for (File file : files) {
                if (file.isFile()) {
                    length += file.length();
                } else {
                    length += getFolderSize(file);
                }
            }
        }
        return length;
    }
}

위의 예제 코드는 getFolderSize 메서드를 사용하여 output 디렉터리의 실제 크기를 계산하고, 이를 이용하여 압축 비율을 계산합니다.

이제 자바를 사용하여 파일의 압축 비율을 복원하는 방법에 대해 알아보았습니다. 파일을 압축 해제하고, 이를 통해 압축 비율을 정확하게 계산할 수 있습니다.

참고 자료