Java tutorial
/** * 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(); } }