Our Blog

0

java.util.zip은 기본적으로 아카이브에 추가 한 파일을 압축하는 두 가지 방법을 제공합니다: 저장 및 DEFLATED. 저장된 메서드에서는 기본적으로 압축되지 않은 파일을 저장하고 원시 바이트만 저장합니다. 반면에 DEFLATED는 LZ77 alogrithm 및 허프만 코드를 사용하여 파일에 대한 압축을 수행합니다. setMethod(ZipEntry.STORED) 또는 setMethod(ZipEntry.DEFLATED) ZipEntry API 메서드를 사용하여 각 개별 ZipEntry에서 사용할 압축 알고리즘을 지정할 수 있습니다. 아래 예는 zip 파일을 만들고 사용자가 다운로드할 수 있도록 생성된 zip 파일을 보내는 방법을 보여 주는 서발입니다. 압축 프로세스는 이 클래스의 zipFiles 메서드에 의해 수행됩니다. 여기서 기본 목표는 플랫 파일만 포함하는 폴더를 압축하는 것입니다. 여기서 주목해야 할 중요한 점은 폴더에 대한 ZipEntry를 만들어 아카이브에 추가한다는 것입니다. 그런 다음 폴더의 각 파일에 대한 Zip 항목을 만듭니다. 폴더의 모든 파일을 압축하고 모든 파일 zip 항목을 만들고 닫은 후 마침내 폴더의 zip 항목을 닫습니다.

주의해야 할 또 다른 중요한 점은 메서드에 parentName 인수를 추가했다는 것입니다. 즉, 기본적으로 쉽게 아카이브의 올바른 폴더에 배치하기 위해 각 파일의 절대 경로를 계산하는 것입니다. 아카이브에 부모 폴더가 하나뿐이기 때문에 여기에 있는 상황은 매우 간단합니다. 여기서 일어나는 일은 URLConnection을 특정 범위의 파일 바이트를 요청하도록 구성했다는 것입니다. 범위는 마지막으로 다운로드한 바이트에서 시작하여 원격 파일 크기에 해당하는 바이트로 끝납니다. onBodyPartReceived() 메서드를 재정의했습니다. 기본 구현은 ArrayList에 수신된 HTTP 청크를 누적합니다. 이로 인해 메모리 사용량이 높거나 대용량 파일을 다운로드하려고 할 때 OutOfMemory 예외가 발생할 수 있습니다. 이를 위해서는 HTTP 응답을 통해 아카이브를 전송해야 합니다. 서블릿을 기반으로 하는 응용 프로그램이 있는 경우 서블릿 출력 스트림을 얻고 zip 파일을 처리하기 위해 준비하는 것만하면 됩니다.

이 작업을 위해 응답에 대 한 올바른 HTTP 헤더를 설정 해야 합니다. 요청 및 응답을 위해 설정할 수 있는 가능한 헤더 목록은 위키백과를 참조하십시오. 사용할 HTTP 응답 헤더는 콘텐츠 처리입니다. 이 헤더의 설명은 `알려진 MIME 유형에 대한 “파일 다운로드” 대화 상자를 올릴 수 있는 기회입니다. 즉, 브라우저가 응답시 이러한 종류의 헤더를 충족하면 사용자에 대한 열기/저장 대화 상자가 자동으로 나타납니다. 이 콘텐츠의 마임 형식을 설정하려면 콘텐츠 형식 헤더를 응용 프로그램/zip으로 설정해야 합니다. 모두 모두, 이것은 서발 코드가 다음과 같이 표시되어야한다는 것을 의미합니다 :이 자습서에서는 Java에서 파일을 ZIP하는 방법을 볼 수 있습니다. ZIP은 데이터 압축을 가능하게하는 아카이브 파일 형식이며 주로 파일 및 폴더에 사용됩니다. ZIP 파일에는 하나 이상의 압축된 파일 또는 폴더가 포함될 수 있습니다. 많은 압축 알고리즘은 여러 플랫폼에서 유비쿼터스인 여러 ZIP 구현에서 사용되었습니다. 압축하지 않고 ZIP 아카이브 파일에 파일을 저장할 수도 있습니다.

그리고 거기에서 파일 경로를 탐색 할 수 있습니다. 예를 들어 : 이제 파일의 총 콘텐츠 크기가 있으므로 파일이 부분적으로 다운로드되었는지 여부를 확인할 수 있습니다. 그렇다면 디스크에 기록 된 마지막 바이트에서 다운로드를 다시 시작합니다 : 이제 zip 파일의 경우이 튜토리얼에서는 HTTP 응답에 zip 파일을 작성하고 브라우저에 다운로드하는 방법을 구체적으로 보여줍니다.