[java] HttpClient를 사용하여 파일 다운로드 시에 진행 상태를 추적하는 방법은?
Apache HttpClient를 사용하여 파일을 다운로드 할 때, 다운로드의 진행 상태를 추적하는 방법을 알려드리겠습니다.
- HttpClient 객체 생성 및 초기화
CloseableHttpClient httpClient = HttpClients.createDefault();
- HttpGet 요청 생성 및 설정
String fileUrl = "http://www.example.com/file.txt"; HttpGet request = new HttpGet(fileUrl);
- ResponseHandler 정의
ResponseHandler<Void> responseHandler = new ResponseHandler<Void>() { @Override public Void handleResponse(final HttpResponse response) throws IOException { int statusCode = response.getStatusLine().getStatusCode(); if (statusCode >= 200 && statusCode < 300) { HttpEntity entity = response.getEntity(); if (entity != null) { try (InputStream inputStream = entity.getContent(); OutputStream outputStream = new FileOutputStream("file.txt")) { byte[] buffer = new byte[1024]; int bytesRead; long totalBytesRead = 0; long contentLength = entity.getContentLength(); while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); totalBytesRead += bytesRead; if (contentLength > 0) { int progress = (int) ((totalBytesRead * 100) / contentLength); System.out.println("다운로드 진행 상태: " + progress + "%"); } } } } return null; } else { throw new ClientProtocolException("Unexpected response status: " + statusCode); } } };
- 요청 실행 및 파일 다운로드
httpClient.execute(request, responseHandler);
위의 코드에서는 HttpClient를 사용하여 파일을 다운로드하는 과정에서 ResponseHandler를 사용하여 HttpClient의 응답을 처리합니다. ResponseHandler 내부에서 파일을 저장하면서, 다운로드 진행 상태를 추적할 수 있습니다.
진행 상태는 전체 파일 크기와 현재까지 읽은 바이트의 수를 이용하여 계산되며, 백분율로 표시됩니다. 이 정보를 원하는 대로 사용하여 진행 바 또는 퍼센티지를 표시할 수 있습니다.
자바 코드를 실행하면 다운로드가 시작되고, 콘솔에 다운로드 진행 상태가 표시됩니다. 파일의 다운로드가 완료되면 “file.txt”라는 이름으로 현재 작업 디렉토리에 저장됩니다.
이 방법을 사용하여 Apache HttpClient를 통해 파일을 다운로드하면서 진행 상태를 추적할 수 있습니다. 이를 응용하여 진행 상태를 웹 페이지에 표시하거나 다른 작업에 활용할 수도 있습니다.
더 많은 세부사항과 기능에 대해서는 Apache HttpClient 문서를 참조하시기 바랍니다.