O Java implementa as funções de descompressão e compressão do ZIP basicamente usam os polipeptídeos e a tecnologia de recursão de Java, que podem comprimir e descomprimir arquivos individuais e quaisquer pastas em cascata, o que é um exemplo muito bom para alguns iniciantes.
O ZIP desempenha dois papéis: arquivamento e compressão; O GZIP não arquiva arquivos, mas apenas comprime um único arquivo. Portanto, nas plataformas UNIX, o alcatrão de comando é geralmente usado para criar um arquivo de arquivo e, em seguida, comandar GZIP para comprimir o arquivo de arquivo.
A biblioteca de classes de E/S Java também inclui algumas classes que podem ler e escrever fluxos de formato compactados. Para fornecer funções de compressão, basta embrulhá -las fora das classes de E/S existentes. Essas classes não são leitor e escritor, mas subclasses de InputStream e Firstamput. Isso ocorre porque o algoritmo de compressão é direcionado para byte e não caracteres.
Aulas e interfaces relacionadas:
Interface de soma de verificação: uma interface implementada pelas classes adler32 e CRC32
ADLER32: Use o algoritmo ALDER32 para calcular o número de somas de verificação
CRC32: Use o algoritmo CRC32 para calcular o número de somas de verificação
CheckEdInputStream: Classe derivada do InputStream, você pode obter a soma de verificação do fluxo de entrada, que é usado para verificar a integridade dos dados.
CheckEdOutputStream: classe derivada de saída, você pode obter a soma de verificação do fluxo de saída, usado para verificar a integridade dos dados
DeflatertutputStream: a classe base da classe compactada.
ZipOutputStream: uma subclasse do DeflaterOutputStream que comprime dados no formato de arquivo zip.
GzipOutputStream: uma subclasse de DeflateroutputStream que comprime dados no formato de arquivo GZIP
Inflaterinputstream: classe base para descompressão
ZipinputStream: uma subclasse do inflaterinputstream, que pode descomprimir dados do formato ZIP
Gzipinputstream: uma subclasse de inflaterinputstream, que pode descomprimir dados de formato ZIP
Classe Zipentry: representa uma entrada de arquivo zip
Classe ZipFile: Esta classe é usada para ler entradas de arquivos ZIP
Use Zip para comprimir e descomprimir vários arquivos
O Java suporta biblioteca de formato ZIP de uma maneira relativamente abrangente, e é necessário usá -la para comprimir vários arquivos em um pacote compactado. Esta biblioteca de classes usa o formato ZIP padrão, por isso é compatível com muitas ferramentas de compressão.
A classe ZipOutputStream possui o conjunto de métodos de compressão e o nível de compressão usado no método de compressão. ZipOutputStream.SetMethod (método int) define o método de compactação padrão usado para entradas. Desde que o método de compactação não seja especificado para uma única entrada de arquivo zip, o método de compactação definido pelo ZipOutputStream é armazenado. O valor padrão é zipOutputStream.Deflated (indica armazenamento de compressão) e também pode ser definido como armazenado (indica apenas armazenamento de arquivo de embalagem). Depois que o ZipOutputStream definir o método de compressão para deflatar, podemos usar ainda mais o método de nível setle (int) para definir o nível de compactação. O valor do nível de compressão é 0-9, com um total de 10 níveis (quanto maior o valor, maior a probabilidade de comprimir). O padrão é deflater.default_compression = -1. Obviamente, também podemos definir o método de compactação para uma única condição através do método setMethod da entrada de entrada.
A classe Zipentry descreve um arquivo compactado armazenado em um arquivo zip. A classe contém vários métodos para configurar e obter informações sobre entradas postais. A classe Zipentry é usada pelo ZipFile [ZipFile.getInputStream (entrada Zipentry)] e ZipinputStream para ler o arquivo zip e ZipOutputStream para gravar no arquivo zip. Existem alguns métodos úteis: getName () retorna o nome de entrada, o ISDirectory () retorna true se for uma entrada de diretório (a entrada do diretório é definida como uma entrada cujo nome termina com '/'), setMethod (método int) define o método de compactação para a entrada, que pode ser zipoutstream.Sedored ou ZipOutputStream.
No exemplo a seguir, usamos o Apache Zip Toolkit (o pacote é Ant.jar), porque o tipo Java vem com ele não suporta caminhos chineses, mas os dois são usados da mesma maneira, mas a ferramenta de compressão Apache possui mais interfaces para definir métodos de codificação e os outros são basicamente os mesmos. Além disso, se você usar org.apache.tools.zip.zipoutputStream para compactar, só podemos usar org.apache.tools.zip.zipentry para descomprimir e não podemos usar java.util.zip.zipinstream para descomprimir e ler. Obviamente, o Apache não fornece a classe ZipinputStream.
Compactação de arquivo:
pacote gizaction; importar java.io. *; importar java.util.zip. *;/** * @author dana ・ li * <p> * * O programa implementa a compactação ZIP [compressão] * <p> * As funções gerais incluem o uso de polimorfismo, a mais de java e as tecnologias de java, que podem ser as tecnologias que podem ser usadas, e outras tecnologias de java, que podem ser usadas, e outras tecnologias de primeira e outras tecnologias de java, que podem ser usadas, e outras tecnologias de primeira linha, que podem ser usadas, e outras tecnologias de java, que podem ser usadas, e outras tecnologias de java, que podem ser usadas, e outras tecnologias de java, que podem ser usadas, e outras tecnologias de core. O caminho de entrada de origem e o caminho de saída de destino precisam ser personalizados no código. * <p> * Nesta seção do código, a parte da compactação é implementada */public class ZipCompressing {private int k = 1; // Defina a variável de número recursivo Void privado ZIP (String zipFilename, File InputFile) lança a exceção {System.out.println ("Compressioning ..."); ZipOutputStream Out = new ZipOutputStream (new FileOutputStream (ZipFileName)); BufferOutputStream bo = new BufferoudOutputStream (out); zip (out, inputfile, inputfile.getName (), bo); bo.close (); out.Close (); // fluxo de saída Fechar System.out.println ("Compressão concluída"); } private void zip (zipOutputStream, arquivo f, base de string, bufferoutputstream bo) lança exceção {// sobrecarga de método if (f.isDirectory ()) {file [] fl = f.listfiles (); if (fl.Length == 0) {out.putNextEntry (new Zipentry (base + "/")); // Crie Sistema de base de ponto de entrada de compressão ZIP.IRTLN (base + "/"); } para (int i = 0; i <fl.length; i ++) {zip (out, fl [i], base + "/" + fl [i] .getName (), bo); // atravessar recursivamente subpastas} System.out.println ("Th" + K + "Sub-Recursiva"); k ++; } else {out.putNextEntry (new Zipentry (base)); // Crie Sistema de base do ponto de entrada de compressão ZIP.IRTLN (base); FileInputStream in = new FileInputStream (f); BufferInputStream bi = new bufferInputStream (in); int b; while ((b = bi.read ())! = -1) {bo.write (b); // Escreva o fluxo de bytes no diretório ZIP atual} bi.close (); in.Close (); // fluxo de entrada Close}}/ *** Test* @param args*/ public static void main (string [] args) {zipCompressing book = new ZipCompressing (); tente {book.zip ("f: //ziptest.zip", novo arquivo ("f: // ziptest")); } catch (Exceção e) {e.printStackTrace (); }}}Descompressão do arquivo:
pacote gizaction, importação java.io.bufferedoutputStream; importar java.io.file; importar java.io.fileInputStream; importputTream. java.util.zip.zipinputStream;/** * @author Dana ・ li * <p> * O programa implementa a descompressão do zíper [descompressão] * <p> * As funções gerais incluem o uso de arquivos polimórficos e de núcleo de CASC. O caminho de entrada de origem e o caminho de saída de destino precisam ser personalizados no código. * <p> * Neste código, a parte da descompressão é implementada; */ public class ZipDecompressing {public static void main (string [] args) {// TODO Método Auto-Generado Stub Long StartTime = System.CurrentTimemillis (); tente {zipinputStream zin = new ZipinputStream (new FileInputStream ("f: //ziptest.zip")); // Fonte de entrada BufferinputStream bin = new bufferinputInputStream (zin); String parent = "f: // ziptest //"; // Caminho de saída (diretório de pasta) arquivo fout = null; Entrada de zipentry; tente {while ((entradas = zin.getNextEntry ())! = null &&! Entry.isDirectory ()) {fout = new File (pai, entrada.getName ()); if (! fout.exists ()) {(novo arquivo (fout.getParent ())). mkdirs (); } FileOutputStream Out = new FileOutputStream (FOUT); BufferOutputStream luta = new BufferoudOutputStream (out); int b; while ((b = bin.read ())! =-1) {bout.Write (b); } Bout.close (); out.Close (); System.out.println (FOUT+"descompressão com sucesso"); } Bin.close (); Zin.close (); } catch (ioexception e) {e.printStackTrace (); }} catch (filenotfoundException e) {e.printStackTrace (); } long endtime = system.currenttimemillis (); System.out.println ("demorado:"+(Endtime-starttime)+"ms"); }}Comprimindo um único arquivo com GZIP
A interface do GZIP é relativamente simples; portanto, se você precisar apenas comprimir um fluxo, poderá usá -lo. É claro que ele pode comprimir fluxos de caracteres e compactar fluxos de bytes. Abaixo está um arquivo de texto que comprime o formato de codificação GBK.
O uso de classes de compressão é muito simples; Basta usar o gzipOutputStream ou o ZipOutputStream para envolver o fluxo de saída e, em seguida, usar GzipinputStream ou ZipinputStream para envolver o fluxo de entrada. O resto são algumas operações de E/S comuns.
importar java.io.bufferedOutputStream; importar java.io.bufferedreader; importar java.io.fileInputStream; importar java.io.fileOutputStream; importar java.io.ioexception; import java.io.iniTreamReader; import java.util.zip.gzip.gzipspinipsiPTRainpSTerAnpStream; java.util.zip.gzipoutputStream; public class gzipCompress {public static void main (string [] args) lança ioexception {// preparar para compactar um arquivo de caracteres. Observe que o arquivo de caracteres aqui é um GBK que codifica buffersader em = new buffarrederReader (new InputStreamReader (new FileInputStream ("e: /tmp/source.txt"), "gbk")); // Use o gzipOutputStream para envolver o fluxo de saída para fazer suas características específicas de compactação e, finalmente, um pacote de compactação test.txt.gz será gerado // e existe um arquivo chamado test.txt no bufferedoututputStream out = new bufferedoutstream (new gzipoutstream (new FileOutStream ("Test.Testtxt.txt.txt.txt.txt.txt.txt. System.out.println ("Comece a escrever arquivos compactados ..."); int c; Enquanto ((c = in.read ())! = -1) { / * * Observe, aqui está um arquivo de caracteres que é lido nos fluxos de caracteres e C não pode ser diretamente armazenado, porque C já está unicode * Código, que perderá informações (é claro, o formato de codificação está errado), por isso deve ser resolvido com GBK e depois armazenado. */ out.write (string.valueof ((char) c) .getBytes ("gbk")); } in.close (); out.Close (); System.out.println ("Comece a ler o arquivo compactado ..."); // Use GzipinputStream para enrolar o fluxo InputStream para torná -lo descomprimido BufferSeader in2 = new BufferredReader (new InputStreamReader (new GzipinputStream (new FileInputStream ("test.txt.gz")), "gbk"); Strings s; // Leia o conteúdo no arquivo compactado enquanto ((s = in2.readline ())! = Null) {System.out.println (s); } in2.Close (); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.