[java] HttpClient를 사용하여 웹 사이트에서 특정 파일을 압축하여 다운로드하는 방법은?

Java에서 HttpClient를 사용하여 웹 사이트에서 특정 파일을 압축하여 다운로드하는 방법을 알아보겠습니다.

HttpClient 라이브러리 추가하기

먼저, HttpClient를 사용하기 위해 라이브러리를 추가해야합니다. Java 11 이상을 사용하는 경우 HttpClient가 기본으로 제공되므로 추가 작업이 필요하지 않습니다. Java 11 이하 버전을 사용하는 경우 아파치 HttpClient 라이브러리를 사용해야합니다.

아파치 HttpClient 라이브러리를 Maven을 통해 추가하는 예제입니다.

<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.13</version>
    </dependency>
</dependencies>

HttpClient를 사용하여 파일 다운로드하기

HttpClient를 사용하여 파일을 다운로드하는 방법은 다음과 같습니다.

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileDownloader {

    public static void main(String[] args) {
        String fileUrl = "https://example.com/path/to/file.zip";
        String savePath = "C:/downloads/file.zip";

        HttpClient httpClient = HttpClientBuilder.create().build();
        HttpGet httpGet = new HttpGet(fileUrl);

        try {
            HttpResponse response = httpClient.execute(httpGet);
            HttpEntity entity = response.getEntity();

            if (entity != null) {
                try (InputStream inputStream = entity.getContent();
                     OutputStream outputStream = new FileOutputStream(savePath)) {

                    byte[] buffer = new byte[4096];
                    int bytesRead;
                    while ((bytesRead = inputStream.read(buffer)) != -1) {
                        outputStream.write(buffer, 0, bytesRead);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위의 예제에서는 HttpClient를 사용하여 지정된 URL에서 파일을 다운로드하고, 다운로드한 파일을 로컬에 저장합니다.

위의 예제에서는 파일을 한번에 메모리에 로딩하지 않고, 버퍼를 사용하여 파일을 작은 단위로 읽어서 저장하는 방식을 사용하고 있습니다. 이 방식은 대용량 파일의 다운로드에도 효과적입니다.

결론

Java에서 HttpClient를 사용하여 웹 사이트에서 파일을 압축하여 다운로드하는 방법을 알아보았습니다. HttpClient를 통해 파일을 다운로드하는 예제 코드를 제공하였으니, 필요에 맞게 수정하여 사용하시기 바랍니다.

참고 자료