ZipURLConnection.java Source code

Java tutorial

Introduction

Here is the source code for ZipURLConnection.java

Source

/**
 * The utillib library.
 * More information is available at http://www.jinchess.com/.
 * Copyright (C) 2003 Alexander Maryanovsky.
 * All rights reserved.
 *
 * The utillib library is free software; you can redistribute
 * it and/or modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation; either version 2 of the
 * License, or (at your option) any later version.
 *
 * The utillib library is distributed in the hope that it will
 * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
 * General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with utillib library; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

import java.net.URL;
import java.net.URLConnection;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipFile;
import java.util.zip.ZipEntry;

/**
 * A <code>URLConnection</code> which loads its content from a specified zip
 * entry within a local file.
 */

public class ZipURLConnection extends URLConnection {

    /**
     * The zip file.
     */

    private final File file;

    /**
     * The name of the zip entry within the zip file.
     */

    private final String zipEntryName;

    /**
     * The <code>ZipFile</code> object for the zip file. Created when
     * <code>connect()</code> is called.
     */

    private ZipFile zipFile = null;

    /**
     * The <code>ZipEntry</code> object for the entry in the zip file. Created
     * when <code>connect()</code> is called.
     */

    private ZipEntry zipEntry = null;

    /**
     * Creates a new <code>ZipURLConnection</code> for the specified zip entry
     * within the specified <code>File</code>.
     */

    public ZipURLConnection(URL url, File file, String zipEntryName) {
        super(url);

        this.file = file;
        this.zipEntryName = zipEntryName;
    }

    /**
     * Attempts to open the zip entry.
     */

    public void connect() throws IOException {
        this.zipFile = new ZipFile(file);
        this.zipEntry = zipFile.getEntry(zipEntryName);
        if (zipEntry == null)
            throw new IOException("Entry " + zipEntryName + " not found in file " + file);
        this.connected = true;
    }

    /**
     * Returns the <code>InputStream</code> that reads from this connection.
     */

    public InputStream getInputStream() throws IOException {
        if (!connected)
            connect();

        return zipFile.getInputStream(zipEntry);
    }

    /**
     * Returns the length of the uncompressed zip entry.
     */

    public int getContentLength() {
        if (!connected)
            return -1;

        return (int) zipEntry.getSize();
    }

}