Java는 ZIP 감압 및 압축 기능을 구현합니다. 기본적으로 Java의 폴리펩티드 및 재귀 기술을 사용하여 개별 파일과 계단식 폴더를 압축하고 압축 할 수 있습니다. 이는 일부 초보자에게 매우 좋은 예입니다.
Zip은 두 가지 역할을 수행합니다 : 보관 및 압축; GZIP는 파일을 보관하지 않고 단일 파일 만 압축합니다. 따라서 UNIX 플랫폼에서 명령 TAR는 일반적으로 아카이브 파일을 작성한 다음 GZIP를 사용하여 아카이브 파일을 압축하는 데 사용됩니다.
Java I/O 클래스 라이브러리에는 압축 형식 스트림을 읽고 쓸 수있는 일부 클래스도 포함되어 있습니다. 압축 기능을 제공하려면 기존 I/O 클래스 외부로 래핑하십시오. 이 클래스는 독자 및 작가가 아니라 입력 스트림 및 외향의 서브 클래스입니다. 압축 알고리즘이 문자보다는 바이트를 대상으로하기 때문입니다.
관련 클래스 및 인터페이스 :
체크섬 인터페이스 : 클래스 Adler32 및 CRC32에 의해 구현 된 인터페이스
Adler32 : Alder32 알고리즘을 사용하여 체크섬 수를 계산합니다.
CRC32 : CRC32 알고리즘을 사용하여 체크섬 수를 계산합니다.
CheckEdInputStream : 입력 스트림 파생 클래스, 입력 스트림의 체크섬을 얻을 수 있으며, 이는 데이터의 무결성을 확인하는 데 사용됩니다.
CheckedOutputStream : outputStream 파생 클래스, 데이터의 무결성을 확인하는 데 사용되는 출력 스트림의 체크섬을 얻을 수 있습니다.
deflateroutputStream : 압축 클래스의 기본 클래스.
ZipOutputStream : 데이터를 ZIP 파일 형식으로 압축하는 deflateroutputStream의 서브 클래스.
gzipoutputStream : 데이터를 gzip 파일 형식으로 압축하는 deflateroutputStream의 서브 클래스
inflaterinputstream : 감압을위한 기본 클래스
ZipInputStream : ZIP 형식 데이터를 압축 할 수있는 LaintaterInputStream의 서브 클래스
gzipinputstream : zip 형식 데이터를 압축 할 수있는 inflaterinputstream의 서브 클래스
zipentry 클래스 : zip 파일 항목을 나타냅니다
ZipFile 클래스 :이 클래스는 Zip 파일에서 항목을 읽는 데 사용됩니다.
ZIP를 사용하여 여러 파일을 압축하고 압축 해제하십시오
Java는 비교적 포괄적 인 방식으로 Zip 형식 라이브러리를 지원하며 여러 파일을 압축 패키지로 압축하는 데 사용해야합니다. 이 클래스 라이브러리는 표준 zip 형식을 사용하므로 많은 압축 도구와 호환됩니다.
ZipOutputStream 클래스에는 압축 메소드 세트와 압축 수준이 압축 방법에 사용됩니다. ZipOutputStream.setMethod (int method) 항목에 사용되는 기본 압축 메소드를 설정합니다. 단일 zip 파일 항목에 대해 압축 방법이 지정되지 않는 한 ZipoutputStream에 의해 설정된 압축 메소드가 저장됩니다. 기본값은 ZipOutputStream.Deflated (압축 저장을 나타냄)이며 저장되도록 설정할 수도 있습니다 (패키지 아카이브 스토리지 만 나타냄). ZipOutputStream이 압축 메소드를 디플레이션하도록 설정 한 후 SetLevel (int Level) 메소드를 추가로 사용하여 압축 레벨을 설정할 수 있습니다. 압축 수준 값은 0-9이며 총 10 레벨 (값이 클수록 압축 될 가능성이 높습니다). 기본값은 deflater.default_compression = -1입니다. 물론, 우리는 Zipentry 항목의 setMethod 메소드를 통해 단일 조건에 대한 압축 방법을 설정할 수도 있습니다.
Zipentry 클래스는 zip 파일에 저장된 압축 파일을 설명합니다. 이 클래스에는 ZIP 항목에 대한 정보를 설정하고 얻는 여러 가지 방법이 포함되어 있습니다. Zipentry 클래스는 ZipFile [ZipFile.getInputStream (Zipentry Entry)] 및 ZipInputStream에서 Zip 파일을 읽고 ZipOutputStream에서 Zip 파일에 쓸 수 있습니다. 유용한 방법이 있습니다. getName () 항목 이름을 반환하고, isdirectory ()가 디렉토리 항목 인 경우 true를 반환합니다 (디렉토리 항목은 '/'로 이름으로 끝나는 항목으로 정의 됨), setMethod (int method)는 입력에 대한 압축 메소드를 설정하여 ZINOUTPUTSTREAM.STORE.STOREDSTREAM.
다음 예에서는 Java 유형이 함께 제공되기 때문에 Apache Zip Toolkit (패키지는 Ant.jar)을 사용했지만 두 가지는 동일한 방식으로 사용되지만 Apache 압축 도구에는 인코딩 메소드를 설정하는 더 많은 인터페이스가 있으며 다른 하나는 동일합니다. 또한 org.apache.tools.zip.zipoutputstream을 사용하여 압축하는 경우 org.apache.tools.zip.zipentry 만 사용할 수 있으며 java.util.zip.zipinputstream을 사용할 수 없습니다. 물론 Apache는 ZipinputStream 클래스를 제공하지 않습니다.
파일 압축 :
패키지 기기; import java.io. *; import java.util.zip. *;/** * @author dana ・ li * <p> * 프로그램은 zip 압축 [압축] * <p> * 일반 기능에는 다형성, 재귀 및 기타 Java 핵심 기술의 사용이 포함되어 있으며, 이는 단일 파일 및 콜트링 폴더를 포함 할 수 있습니다. 소스 입력 경로 및 대상 출력 경로는 코드에서 사용자 정의해야합니다. * <p> *이 코드 섹션에서 압축 부분이 구현됩니다 */public class zipcompressing {private int k = 1; // 재귀 번호 정의 변수 개인 void Zip (String ZipFilename, File InputFile)은 예외 {System.out.println ( "compressing ...")을 던집니다. ZipOutputStream out = 새로운 ZipOutputStream (new FileOutputStream (ZipFilename)); BufferedOutputStream BO = 새로운 BufferedOutputStream (Out); zip (out, inputfile, inputfile.getName (), bo); bo.close (); out.close (); // 출력 스트림 system.out.println ( "압축 완료"); } private void Zip (ZipOutputStream out, file f, String base, bufferedOutputStream bo)는 예외를 던집니다 {// 메소드 오버로드 if (f.isdirectory ()) {file [] fl = f.listfiles (); if (fl.length == 0) {out.putnextentry (new Zipentry (base + "/")); // ZIP COMPPRESS ENTRICT POINT BASE SYSTEMS.OUT.PRINTLN (BASE + "/"); } for (int i = 0; i <fl.length; i ++) {zip (out, fl [i], base + "/" + fl [i] .getname (), bo); // 재귀 적으로 subfolders} system.out.println ( "th" + k + "sub-recursive"); K ++; } else {out.putnextentry (new Zipentry (base)); // ZIP COMPRETRY ENTRICT POINT BASE SYSTEMS.OUT.PRINTLN (BASE) 만들기; fileInputStream in = new FileInputStream (f); bufferedInputStream bi = 새로운 bufferedInputStream (in); int b; while ((b = bi.read ())! = -1) {bo.write (b); // 바이트 스트림을 현재 zip 디렉토리} bi.close ()에 쓰십시오. 넣다(); // 입력 스트림 닫기}}/ *** 테스트* @param args*/ public static void main (String [] args) {zipcompressing book = new Zipcompressing (); try {book.zip ( "f : //ziptest.zip", 새 파일 ( "f : // ziptest"); } catch (예외 e) {e.printstacktrace (); }}}파일 감압 :
패키지 기기; import java.io.bufferedInputStream; import java.io.bufferedoutputStream; import java.io.file; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.fileoutputstream; import java.io.io.ioeccement; java.util.zip.zipentry; import java.util.zip.zipinputstream;/** * @author dana ・ li * <p> * 프로그램은 zip demompression [decompression] * <p> * 일반적인 기능은 다형성 및 재귀와 같은 Java 코어 기술의 사용을 포함하며, 개별 파일 및 사례를 제거 할 수 있습니다. 소스 입력 경로 및 대상 출력 경로는 코드에서 사용자 정의해야합니다. * <p> *이 코드에서는 감압 부분이 구현됩니다. */ public class zipdecompressing {public static void main (String [] args) {// todo 자동 생성 메소드 스터브 Long StartTime = System.CurrentTimeMillis (); try {zipinputStream zin = new ZipinputStream (new FileInputStream ( "f : //ziptest.zip")); // 입력 소스 zip path bufferedInputStream bin = new bufferedInputStream (zin); 문자열 parent = "f : // ziptest //"; // 출력 경로 (폴더 디렉토리) 파일 fout = null; zipentry 항목; try {while ((entry = zin.getNextEntry ())! = null &&! enther.isdirectory ()) {fout = 새 파일 (parent, enther.getName ()); if (! fout.exists ()) {(새 파일 (fout.getParent ()). mkdirs (); } fileoutputStream out = 새 FileOutputStream (fout); BufferedOutputStream Bout = New BufferedOutputStream (Out); int b; while ((b = bin.read ())! = -1) {bout.write (b); } bout.close (); out.close (); System.out.println (Fout+"Decompression SucceT"); } bin.close (); zin.close (); } catch (ioexception e) {e.printstacktrace (); }} catch (filenotfoundException e) {e.printstacktrace (); } long endtime = System.CurrentTimeMillis (); System.out.println ( "시간 소모 :"+(endtime-starttime)+"ms"); }}GZIP로 단일 파일을 압축합니다
GZIP의 인터페이스는 비교적 간단하므로 스트림 만 압축 해야하는 경우 사용할 수 있습니다. 물론 문자 스트림을 압축하고 바이트 스트림을 압축 할 수 있습니다. 아래는 GBK 인코딩 형식을 압축하는 텍스트 파일입니다.
압축 클래스의 사용은 매우 간단합니다. GzipoutputStream 또는 ZipoutputStream을 사용하여 출력 스트림을 감싸고 GzipinputStream 또는 ZipinputStream을 사용하여 입력 스트림을 감싸십시오. 나머지는 일반적인 I/O 작업입니다.
import java.io.bufferedoutputStream; import java.io.bufferedReader; import java.io.fileInputStream; import java.io.fileoutputStream; import java.io.ioexception; import java.io.inputstreamreader; import java.util.zip.zipinpinceptream; import java.io java.util.zip.gzipoutputstream; public class gzipcompress {public static void main (String [] args)은 ioexception {// 문자 파일을 압축하기 위해 준비합니다. 여기의 문자 파일은 = new bufferedReader in = new bufferedReader (new inputStreamReader ( "e : /tmp/source.txt"), "gbk"); // gzipoutputStream을 사용하여 출력 스트림을 마무리하여 특정 압축 특성을 만들고 마지막으로 Test.txt.gz 압축 패키지가 생성되고 // IT BufferedOutputStream out에 text라는 파일이 있습니다 (new gzipoutputStream (new FileOutputStream ( "test.txt.gz")). System.out.println ( "압축 파일 작성 시작 ..."); int c; ((c = in.read ())! = -1) { / * * 참고 문자 스트림에서 읽는 문자 파일은 다음과 같습니다. C는 이미 유니 코드 * 코드이기 때문에 직접 저장할 수 없습니다. */ out.write (string.valueof ((char) c) .getBytes ( "gbk")); } in.close (); out.close (); System.out.println ( "압축 파일 읽기 시작 ..."); // gzipinputStream을 사용하여 입력 스트림을 감싸서 압축 된 버퍼드 리더 in2 = new bufferedReader (new inputStreamReader (new gzipinputStream ( "test.txt.gz")), "GBK"); 문자열 s; // 압축 파일의 내용을 읽습니다. } in2.close (); }}위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.