亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java解壓zip文件示例

2019-11-26 15:38:29
字體:
來源:轉載
供稿:網友

若是使用Java自帶的壓縮工具包來實現解壓縮文件到指定文件夾的功能,因為jdk提供的zip只能按UTF-8格式處理,而Windows系統中文件名是以GBK方式編碼的,所以如果是解壓一個包含中文文件名的zip包,會報非法參數異常,所以要實現解壓縮,就得對DeflaterOutputStream.java、InflaterInputStream.java、ZipConstants.java、ZipEntry.java、ZipInputStream.java以及ZipOutputStream.java這些相關的類進行修改,過程如下:
因為從 J2SE 1.4 開始,Java 編譯器不再支持 import 進未命包名的類、接口,所以在創建的Java項目中,一定要新建一個自己定義的包,包命名的格式一般為學校域名的逆序+自己的網名,比如cn.edu.xidian.crytoll。
在包內新建DeflaterOutputStream類,代碼如下:

DeflaterOutputStream.java:

復制代碼 代碼如下:

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);
    }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲精品狠狠操| 国产一区二区三区视频免费| 日韩在线观看免费| 欧美中文在线字幕| 日日噜噜噜夜夜爽亚洲精品| 国产精品久久久久久av福利| 78色国产精品| 欧美二区乱c黑人| 久久国产精品影视| 中文字幕亚洲专区| xx视频.9999.com| 国产精品亚洲美女av网站| 97精品国产97久久久久久| 日韩成人在线免费观看| 97成人超碰免| 亚洲欧美中文另类| 国产91热爆ts人妖在线| 91久久精品在线| 中文字幕av一区二区三区谷原希美| 久久亚洲综合国产精品99麻豆精品福利| 国产精品亚洲欧美导航| 亚洲一级黄色av| 国产午夜一区二区| 欧美激情一级二级| 97国产在线视频| 色综合久综合久久综合久鬼88| 九九热99久久久国产盗摄| 久久久久北条麻妃免费看| 日韩电视剧免费观看网站| 欧美黑人视频一区| 亚洲а∨天堂久久精品9966| 久久精品国产亚洲精品| 欧美午夜精品久久久久久浪潮| 欧美亚洲在线观看| 91高潮在线观看| 91九色国产在线| 欧美性xxxx极品hd欧美风情| 国产精品高潮呻吟久久av野狼| 久久久国产一区二区三区| 美女视频黄免费的亚洲男人天堂| 国产成人精品电影久久久| 精品福利在线视频| 全亚洲最色的网站在线观看| 国产精品久久97| 91在线视频精品| 欧美激情va永久在线播放| 精品成人在线视频| 91在线播放国产| 欧美一级高清免费| 欧美性猛交xxxx免费看漫画| 成人免费淫片aa视频免费| 国产精选久久久久久| 日本道色综合久久影院| 亚洲精品色婷婷福利天堂| 91久热免费在线视频| 日韩免费观看视频| 欧美成人精品三级在线观看| 国产精品精品久久久久久| 日韩在线视频一区| 91免费精品国偷自产在线| 日韩国产中文字幕| 亚洲成人精品视频在线观看| 国产在线视频2019最新视频| 国产97在线|亚洲| 中文字幕亚洲综合久久筱田步美| 欧美日韩亚洲网| 国产精品高潮在线| 成人黄色av网| 国产欧美精品在线播放| 亚洲三级黄色在线观看| 欧美激情视频给我| 日韩一级黄色av| 国产精品入口夜色视频大尺度| 一本色道久久综合亚洲精品小说| 国产91在线高潮白浆在线观看| 亚州精品天堂中文字幕| 另类天堂视频在线观看| 亚洲自拍在线观看| 九九精品在线播放| 国产福利视频一区二区| 国产在线高清精品| 中文字幕精品国产| 国产亚洲欧洲高清| 成人在线播放av| 欧美日韩激情美女| 国产精品久久久久久av下载红粉| 91精品视频在线| 91在线免费视频| 欧美大胆a视频| 久久男人av资源网站| 久久亚洲精品小早川怜子66| 日韩成人高清在线| 日韩精品视频在线观看免费| 色综合久久天天综线观看| 日韩av综合中文字幕| 日本午夜在线亚洲.国产| 国产福利精品av综合导导航| 4444欧美成人kkkk| 日本aⅴ大伊香蕉精品视频| 日韩av中文字幕在线| 国产69精品久久久久9999| 亚洲电影免费观看高清| 日韩亚洲综合在线| 永久免费看mv网站入口亚洲| 亚洲男人第一av网站| 成人av.网址在线网站| 国产精品久久久久久久久久久久| 欧洲成人午夜免费大片| 欧美激情一区二区三区久久久| 91av在线网站| 97国产精品人人爽人人做| 午夜精品久久久99热福利| 91在线观看免费高清完整版在线观看| 欧美日韩中文字幕日韩欧美| 尤物yw午夜国产精品视频| 国产精品91久久| 亚洲欧美一区二区三区在线| 欧美性生活大片免费观看网址| 亚洲欧美中文字幕| 最近2019中文字幕在线高清| 97视频在线观看免费| 4444欧美成人kkkk| 欧美做爰性生交视频| 国产精品入口夜色视频大尺度| 亚洲va久久久噜噜噜久久天堂| 亚洲精品天天看| 欧美成人在线免费| 午夜欧美不卡精品aaaaa| 成人在线视频网| 亚洲欧美国产视频| 亚洲色无码播放| 欧美在线观看视频| 中文字幕免费精品一区| 国产精品免费一区二区三区都可以| 欧美高清在线播放| 97视频免费看| 亚洲精品美女久久| 国产精品直播网红| 国产精品福利在线观看网址| 日韩av中文字幕在线播放| 亚洲男人天天操| 亚洲国产精品久久久| 精品视频—区二区三区免费| 欧美人在线观看| 国产成人亚洲综合| 国产91对白在线播放| 国产亚洲精品久久久久久牛牛| 国产视频久久久久久久| 中文字幕在线国产精品| 2020欧美日韩在线视频| 国产精品亚洲一区二区三区| 精品日韩中文字幕| 亚洲国产精品成人va在线观看| www国产91| 97在线视频国产| 日韩一区视频在线| 欧美体内谢she精2性欧美| 亚洲午夜精品视频| 国产91在线播放九色快色| 欧美精品videos| 久久久噜噜噜久久| 久久影视电视剧免费网站清宫辞电视| 亚洲999一在线观看www| 国产精品va在线播放我和闺蜜|