[java] 파일 압축 및 압축 해제를 위한 Apache Commons IO 사용법

파일 압축 및 압축 해제는 자주 사용되는 작업 중 하나입니다. Java를 사용하여 파일을 압축하고 압축을 해제하기 위해 Apache Commons IO 라이브러리를 사용할 수 있습니다. Apache Commons IO는 파일 및 디렉토리 작업을 수행하는 데 도움이되는 다양한 유틸리티 함수와 클래스를 제공합니다.

이번 튜토리얼에서는 Apache Commons IO를 사용하여 파일을 압축하고 압축을 해제하는 방법을 살펴보겠습니다.

1. Apache Commons IO 라이브러리 추가하기

먼저, Apache Commons IO 라이브러리를 다운로드하고 프로젝트에 추가해야 합니다. Maven을 사용하는 경우 다음 의존성을 pom.xml 파일에 추가하세요.

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

Gradle을 사용하는 경우 build.gradle 파일에 다음 의존성을 추가하세요.

implementation 'commons-io:commons-io:2.11.0'

2. 파일 압축하기

Apache Commons IO를 사용하여 파일을 압축하려면 ZipOutputStream 클래스를 사용해야 합니다. 다음은 파일을 압축하는 예제 코드입니다.

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

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

public class FileCompressionExample {
    public static void main(String[] args) {
        String sourceFilePath = "path/to/source/file.txt";
        String zipFilePath = "path/to/output/file.zip";

        try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(zipFilePath))) {
            File sourceFile = new File(sourceFilePath);

            zipOutputStream.putNextEntry(new ZipEntry(sourceFile.getName()));
            byte[] fileContent = FileUtils.readFileToByteArray(sourceFile);
            zipOutputStream.write(fileContent);
            zipOutputStream.closeEntry();

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

위의 예제에서는 ZipOutputStream을 사용하여 파일을 압축합니다. ZipOutputStream은 생성자에 FileOutputStream을 전달하여 압축 파일의 출력 스트림을 설정합니다. putNextEntry() 메소드를 호출하여 새로운 압축 항목을 추가하고, write() 메소드를 사용하여 실제 파일 데이터를 압축 파일에 기록합니다.

3. 파일 압축 해제하기

파일을 압축 해제하기 위해서는 ZipInputStream 클래스를 사용해야 합니다. 다음은 파일을 압축 해제하는 예제 코드입니다.

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class FileDecompressionExample {
    public static void main(String[] args) {
        String zipFilePath = "path/to/input/file.zip";
        String destinationPath = "path/to/output/directory/";

        try (ZipInputStream zipInputStream = new ZipInputStream(FileUtils.openInputStream(new File(zipFilePath)))) {
            ZipEntry zipEntry = zipInputStream.getNextEntry();
            while (zipEntry != null) {
                String entryName = zipEntry.getName();
                File outputFile = new File(destinationPath + entryName);

                if (zipEntry.isDirectory()) {
                    outputFile.mkdirs();
                } else {
                    FileOutputStream fileOutputStream = new FileOutputStream(outputFile);
                    IOUtils.copy(zipInputStream, fileOutputStream);
                    fileOutputStream.close();
                }

                zipEntry = zipInputStream.getNextEntry();
            }

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

위의 예제에서는 ZipInputStream을 사용하여 압축 파일을 읽고, getNextEntry() 메소드를 호출하여 다음 압축된 파일 항목을 읽습니다. getName() 메소드를 사용하여 파일의 이름을 가져온 후, 해당 파일을 출력 디렉토리에 작성합니다.

결론

이번 튜토리얼에서는 Apache Commons IO를 사용하여 파일을 압축하고 압축 해제하는 방법을 알아보았습니다. 이러한 유틸리티 함수와 클래스를 사용하면 파일 작업을 더욱 쉽게 수행할 수 있습니다.

관련 참고 문서: