最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java解壓zip文件示例

 更新時(shí)間:2014年03月02日 15:01:35   作者:  
這篇文章主要介紹了java解壓zip文件示例,在獲得一個(gè)以Zip格式壓縮的文件之后,需要將其進(jìn)行解壓縮,還原成壓縮前的文件,下面是代碼示例

若是使用Java自帶的壓縮工具包來(lái)實(shí)現(xiàn)解壓縮文件到指定文件夾的功能,因?yàn)閖dk提供的zip只能按UTF-8格式處理,而Windows系統(tǒng)中文件名是以GBK方式編碼的,所以如果是解壓一個(gè)包含中文文件名的zip包,會(huì)報(bào)非法參數(shù)異常,所以要實(shí)現(xiàn)解壓縮,就得對(duì)DeflaterOutputStream.java、InflaterInputStream.java、ZipConstants.java、ZipEntry.java、ZipInputStream.java以及ZipOutputStream.java這些相關(guān)的類進(jìn)行修改,過(guò)程如下:
因?yàn)閺?J2SE 1.4 開(kāi)始,Java 編譯器不再支持 import 進(jìn)未命包名的類、接口,所以在創(chuàng)建的Java項(xiàng)目中,一定要新建一個(gè)自己定義的包,包命名的格式一般為學(xué)校域名的逆序+自己的網(wǎng)名,比如cn.edu.xidian.crytoll。
在包內(nèi)新建DeflaterOutputStream類,代碼如下:

DeflaterOutputStream.java:

復(fù)制代碼 代碼如下:

package cn.edu.xdian.crytoll;

import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.Deflater;

/**
 * This class implements an output stream filter for compressing data in
 * the "deflate" compression format. It is also used as the basis for other
 * types of compression filters, such as GZIPOutputStream.
 *
 * @see     Deflater
 * @version     1.36, 03/13/06
 * @author  David Connelly
 */
public
class DeflaterOutputStream extends FilterOutputStream {
    /**
     * Compressor for this stream.
     */
    protected Deflater def;

    /**
     * Output buffer for writing compressed data.
     */
    protected byte[] buf;

    /**
     * Indicates that the stream has been closed.
     */

    private boolean closed = false;

    /**
     * Creates a new output stream with the specified compressor and
     * buffer size.
     * @param out the output stream
     * @param def the compressor ("deflater")
     * @param size the output buffer size
     * @exception IllegalArgumentException if size is <= 0
     */
    public DeflaterOutputStream(OutputStream out, Deflater def, int size) {
        super(out);
        if (out == null || def == null) {
            throw new NullPointerException();
        } else if (size <= 0) {
            throw new IllegalArgumentException("buffer size <= 0");
        }
        this.def = def;
        buf = new byte[size];
    }

    /**
     * Creates a new output stream with the specified compressor and
     * a default buffer size.
     * @param out the output stream
     * @param def the compressor ("deflater")
     */
    public DeflaterOutputStream(OutputStream out, Deflater def) {
    this(out, def, 512);
    }

    boolean usesDefaultDeflater = false;

    /**
     * Creates a new output stream with a default compressor and buffer size.
     * @param out the output stream
     */
    public DeflaterOutputStream(OutputStream out) {
    this(out, new Deflater());
        usesDefaultDeflater = true;
    }

    /**
     * Writes a byte to the compressed output stream. This method will
     * block until the byte can be written.
     * @param b the byte to be written
     * @exception IOException if an I/O error has occurred
     */
    public void write(int b) throws IOException {
        byte[] buf = new byte[1];
    buf[0] = (byte)(b & 0xff);
    write(buf, 0, 1);
    }

    /**
     * Writes an array of bytes to the compressed output stream. This
     * method will block until all the bytes are written.
     * @param b the data to be written
     * @param off the start offset of the data
     * @param len the length of the data
     * @exception IOException if an I/O error has occurred
     */
    public void write(byte[] b, int off, int len) throws IOException {
    if (def.finished()) {
        throw new IOException("write beyond end of stream");
    }
        if ((off | len | (off + len) | (b.length - (off + len))) < 0) {
        throw new IndexOutOfBoundsException();
    } else if (len == 0) {
        return;
    }
    if (!def.finished()) {
            // Deflate no more than stride bytes at a time.  This avoids
            // excess copying in deflateBytes (see Deflater.c)
            int stride = buf.length;
            for (int i = 0; i < len; i+= stride) {
                def.setInput(b, off + i, Math.min(stride, len - i));
                while (!def.needsInput()) {
                    deflate();
                }
            }
    }
    }

    /**
     * Finishes writing compressed data to the output stream without closing
     * the underlying stream. Use this method when applying multiple filters
     * in succession to the same output stream.
     * @exception IOException if an I/O error has occurred
     */
    public void finish() throws IOException {
    if (!def.finished()) {
        def.finish();
        while (!def.finished()) {
        deflate();
        }
    }
    }

    /**
     * Writes remaining compressed data to the output stream and closes the
     * underlying stream.
     * @exception IOException if an I/O error has occurred
     */
    public void close() throws IOException {
        if (!closed) {
            finish();
            if (usesDefaultDeflater)
                def.end();
            out.close();
            closed = true;
        }
    }

    /**
     * Writes next block of compressed data to the output stream.
     * @throws IOException if an I/O error has occurred
     */
    protected void deflate() throws IOException {
    int len = def.deflate(buf, 0, buf.length);
    if (len > 0) {
        out.write(buf, 0, len);
    }
    }
}

相關(guān)文章

  • Java for-each循環(huán)使用難題2例(高級(jí)使用方法)

    Java for-each循環(huán)使用難題2例(高級(jí)使用方法)

    從Java5起,在Java中有了for-each循環(huán),可以用來(lái)循環(huán)遍歷collection和array。For each循環(huán)允許你在無(wú)需保持傳統(tǒng)for循環(huán)中的索引,或在使用iterator /ListIterator時(shí)無(wú)需調(diào)用while循環(huán)中的hasNext()方法就能遍歷collection
    2014-04-04
  • 使用SpringBoot+Prometheus+Grafana實(shí)現(xiàn)可視化監(jiān)控

    使用SpringBoot+Prometheus+Grafana實(shí)現(xiàn)可視化監(jiān)控

    本文主要給大家介紹了如何使用Spring?actuator+監(jiān)控組件prometheus+數(shù)據(jù)可視化組件grafana來(lái)實(shí)現(xiàn)對(duì)Spring?Boot應(yīng)用的可視化監(jiān)控,文中有詳細(xì)的代碼供大家參考,具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-02-02
  • Maven?繼承父工程時(shí)的relativePath標(biāo)簽詳細(xì)解析

    Maven?繼承父工程時(shí)的relativePath標(biāo)簽詳細(xì)解析

    這篇文章主要介紹了Maven?繼承父工程時(shí)的relativePath標(biāo)簽解析,通過(guò)本文學(xué)習(xí)你需要注意子模塊想要用父模塊pom中的版本,請(qǐng)注意配置relativePath屬性,需要的朋友可以參考下
    2022-12-12
  • Java實(shí)現(xiàn)堆排序(Heapsort)實(shí)例代碼

    Java實(shí)現(xiàn)堆排序(Heapsort)實(shí)例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)堆排序(Heapsort)實(shí)例代碼,有需要的朋友可以參考一下
    2013-12-12
  • Java 集合的Contains和Remove方法

    Java 集合的Contains和Remove方法

    這篇文章主要介紹了Java 集合Contains和Remove方法的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-02-02
  • Activiti常用類簡(jiǎn)介

    Activiti常用類簡(jiǎn)介

    這篇文章主要介紹了Activiti常用類,需要的朋友可以參考下
    2014-08-08
  • Java?生成透明圖片的設(shè)置實(shí)現(xiàn)demo

    Java?生成透明圖片的設(shè)置實(shí)現(xiàn)demo

    這篇文章主要為大家介紹了Java?生成透明圖片的設(shè)置實(shí)現(xiàn)demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 一文詳解jvm中的引用類型

    一文詳解jvm中的引用類型

    在Java中對(duì)象以引用來(lái)指向JVM的內(nèi)存區(qū)塊,這里我們總結(jié)了強(qiáng)引用、軟引用、弱引用和假象引用(幽靈引用),下面這篇文章主要給大家介紹了關(guān)于jvm中引用類型的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • Java中MapStruct對(duì)象映射的實(shí)現(xiàn)

    Java中MapStruct對(duì)象映射的實(shí)現(xiàn)

    MapStruct是一種Java實(shí)體類映射框架,本文就來(lái)介紹一下Java中MapStruct對(duì)象映射的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • Java While循環(huán) do-while循環(huán)用法

    Java While循環(huán) do-while循環(huán)用法

    循環(huán)語(yǔ)句就是讓計(jì)算機(jī)根據(jù)條件做循環(huán)計(jì)算,在條件滿足時(shí)繼續(xù)循環(huán),條件不滿足時(shí)退出循環(huán),需要的朋友可以參考下
    2020-11-11

最新評(píng)論

孟津县| 延寿县| 莎车县| 永州市| 敖汉旗| 历史| 固原市| 娄烦县| 伊金霍洛旗| 阳山县| 霍林郭勒市| 泸水县| 绥中县| 玉环县| 定结县| 南丰县| 长海县| 雷波县| 华宁县| 石泉县| 鄂尔多斯市| 通江县| 铁力市| 图木舒克市| 奉化市| 英超| 全州县| 青冈县| 德阳市| 吴忠市| 惠水县| 南华县| 铁力市| 沐川县| 昭觉县| 临猗县| 利辛县| 凤翔县| 老河口市| 静宁县| 达孜县|