[java] 자바에서 압축된 데이터를 다른 파일로 복사하는 방법

압축된 데이터를 다른 파일로 복사하는 방법은 자바에서 매우 간단합니다. 자바는 자체적으로 압축 관련 라이브러리를 제공하며, 이를 사용하여 데이터를 압축하고 압축을 풀 수 있습니다. 이번 포스트에서는 java.util.zip 패키지의 ZipInputStreamZipOutputStream 클래스를 사용하여 압축된 데이터를 다른 파일로 복사하는 예제를 살펴보겠습니다.

1. 압축된 데이터를 읽기 위한 준비

압축된 데이터를 읽기 위해서는 ZipInputStream 클래스를 사용해야 합니다. 아래 예제에서는 ZipInputStream을 사용하여 압축된 파일을 열고, 압축된 데이터를 읽을 수 있는 준비를 합니다.

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

public class ZipFileReader {
    public static void main(String[] args) {
        try {
            ZipInputStream zipIn = new ZipInputStream(new FileInputStream("compressed.zip"));

            ZipEntry entry = zipIn.getNextEntry();
            while (entry != null) {
                String fileName = entry.getName();
                FileOutputStream fileOut = new FileOutputStream(fileName);

                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = zipIn.read(buffer)) != -1) {
                    fileOut.write(buffer, 0, bytesRead);
                }

                fileOut.close();
                zipIn.closeEntry();
                entry = zipIn.getNextEntry();
            }
            
            zipIn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위 예제에서는 “compressed.zip” 파일을 ZipInputStream으로 열고, getNextEntry() 메소드를 사용하여 압축 파일 내의 다음 엔트리(파일)를 찾습니다. 엔트리가 있을 경우, 해당 엔트리의 이름을 entry.getName()을 통해 가져오고, FileOutputStream을 사용하여 새 파일을 생성합니다. 그리고 read() 메소드를 이용하여 압축된 데이터를 읽고, write() 메소드를 이용하여 읽은 데이터를 새 파일에 씁니다. 마지막으로 close() 메소드를 호출하여 파일과 압축 엔트리를 닫습니다.

2. 압축된 데이터를 새 파일로 복사하기

위의 예제에서는 압축된 데이터를 읽어서 새 파일로 복사하는 기능을 구현하였습니다. 이제 이를 활용하여 압축된 데이터를 다른 파일로 복사하는 예제를 작성해보겠습니다. 아래 예제에서는 ZipFileReader 클래스의 기능을 활용하여 “compressed.zip” 파일의 압축된 데이터를 “newfile.txt”로 복사하는 예제입니다.

public class ZipFileCopier {
    public static void main(String[] args) {
        try {
            // 압축된 데이터를 읽어와서 새 파일로 복사하는 코드
            ZipFileReader zipFileReader = new ZipFileReader();
            zipFileReader.copyFile("compressed.zip", "newfile.txt");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

위 예제에서는 ZipFileReader 클래스의 copyFile() 메소드를 호출하여 “compressed.zip” 파일의 압축된 데이터를 “newfile.txt”로 복사합니다. 이렇게하면 압축된 데이터를 다른 파일로 효과적으로 복사할 수 있습니다.

자바에서 압축된 데이터를 다른 파일로 복사하는 방법을 살펴보았습니다. ZipInputStreamZipOutputStream 클래스를 사용하면 자바에서 쉽게 압축된 데이터를 처리할 수 있습니다. 이를 활용하여 데이터의 압축 및 압축 해제, 파일의 복사 등 다양한 작업을 수행할 수 있습니다.

참고 자료