⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zipfile.java

📁 java源代码 请看看啊 提点宝贵的意见
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * @(#)ZipFile.java	1.60 04/05/06 * * Copyright 2004 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.util.zip;import java.io.InputStream;import java.io.IOException;import java.io.EOFException;import java.io.File;import java.util.Vector;import java.util.Enumeration;import java.util.NoSuchElementException;import java.security.AccessController;/** * This class is used to read entries from a zip file. * * @version   1.60, 05/06/04  * @author	David Connelly */publicclass ZipFile implements ZipConstants {    private long jzfile;  // address of jzfile data    private String name;  // zip file name    private int total;	  // total number of entries    private static final int STORED = ZipEntry.STORED;    private static final int DEFLATED = ZipEntry.DEFLATED;    /**     * Mode flag to open a zip file for reading.     */    public static final int OPEN_READ = 0x1;            /**     * Mode flag to open a zip file and mark it for deletion.  The file will be     * deleted some time between the moment that it is opened and the moment     * that it is closed, but its contents will remain accessible via the     * <tt>ZipFile</tt> object until either the close method is invoked or the      * virtual machine exits.     */    public static final int OPEN_DELETE = 0x4;        static {	AccessController.doPrivileged(			  new sun.security.action.LoadLibraryAction("zip"));	initIDs();    }    private static native void initIDs();    /**     * Opens a zip file for reading.     *      * <p>First, if there is a security     * manager, its <code>checkRead</code> method     * is called with the <code>name</code> argument     * as its argument to ensure the read is allowed.     *      * @param name the name of the zip file     * @exception ZipException if a ZIP format error has occurred     * @exception IOException if an I/O error has occurred     * @exception  SecurityException  if a security manager exists and its       *             <code>checkRead</code> method doesn't allow read access to the file.     * @see SecurityManager#checkRead(java.lang.String)     */    public ZipFile(String name) throws IOException {	this(new File(name), OPEN_READ);    }    /**     * Opens a new <code>ZipFile</code> to read from the specified     * <code>File</code> object in the specified mode.  The mode argument     * must be either <tt>OPEN_READ</tt> or <tt>OPEN_READ | OPEN_DELETE</tt>.     *      * <p>First, if there is a security manager, its <code>checkRead</code>     * method is called with the <code>name</code> argument as its argument to     * ensure the read is allowed.     *     * @param file the ZIP file to be opened for reading     * @param mode the mode in which the file is to be opened     * @exception ZipException if a ZIP format error has occurred     * @exception IOException if an I/O error has occurred     * @exception  SecurityException  if a security manager exists and its       *             <code>checkRead</code> method doesn't allow read access to the file,     *             or <code>checkDelete</code> method doesn't allow deleting the file     *             when <tt>OPEN_DELETE</tt> flag is set.     * @exception IllegalArgumentException     *            If the <tt>mode</tt> argument is invalid     * @see SecurityManager#checkRead(java.lang.String)     */    public ZipFile(File file, int mode) throws IOException {        if (((mode & OPEN_READ) == 0) ||             ((mode & ~(OPEN_READ | OPEN_DELETE)) != 0)) {            throw new IllegalArgumentException("Illegal mode: 0x"+                                                Integer.toHexString(mode));        }        String name = file.getPath();	SecurityManager sm = System.getSecurityManager();	if (sm != null) {	    sm.checkRead(name);	    if ((mode & OPEN_DELETE) != 0) {		sm.checkDelete(name);	    }	}	long jzfileCopy = open(name, mode, file.lastModified());	this.name = name;	this.total = getTotal(jzfileCopy);        jzfile = jzfileCopy;    }    private static native long open(String name, int mode, long lastModified);    private static native int getTotal(long jzfile);    /**     * Opens a ZIP file for reading given the specified File object.     * @param file the ZIP file to be opened for reading     * @exception ZipException if a ZIP error has occurred     * @exception IOException if an I/O error has occurred     */    public ZipFile(File file) throws ZipException, IOException {	this(file, OPEN_READ);    }    /**     * Returns the zip file entry for the specified name, or null     * if not found.     *     * @param name the name of the entry     * @return the zip file entry, or null if not found     * @exception IllegalStateException if the zip file has been closed     */    public ZipEntry getEntry(String name) {        if (name == null) {            throw new NullPointerException("name");        }        long jzentry = 0;        synchronized (this) {            ensureOpen(jzfile);            jzentry = getEntry(jzfile, name);            if (jzentry == 0 && !name.endsWith("/")) {                // try a directory name                jzentry = getEntry(jzfile, name + "/");            }            if (jzentry != 0) {                ZipEntry ze = new ZipEntry(name, jzentry);                freeEntry(jzfile, jzentry);                return ze;            }        }        return null;    }    private static native long getEntry(long jzfile, String name);    // freeEntry releases the C jzentry struct.      private static native void freeEntry(long jzfile, long jzentry);    /**     * Returns an input stream for reading the contents of the specified     * zip file entry.     *     * Returns an input stream for reading the contents of the specified     * zip file entry.     *     * <p> Closing this ZIP file will, in turn, close all input      * streams that have been returned by invocations of this method.     *     * @param entry the zip file entry     * @return the input stream for reading the contents of the specified     * zip file entry.     * @exception ZipException if a ZIP format error has occurred     * @exception IOException if an I/O error has occurred     * @exception IllegalStateException if the zip file has been closed     */    public InputStream getInputStream(ZipEntry entry) throws IOException {	return getInputStream(entry.name);    }    /**     * Returns an input stream for reading the contents of the specified     * entry, or null if the entry was not found.     */    private InputStream getInputStream(String name) throws IOException {	if (name == null) {	    throw new NullPointerException("name");	}        long jzentry = 0;        ZipFileInputStream in = null;        synchronized (this) {            ensureOpen(jzfile);            jzentry = getEntry(jzfile, name);            if (jzentry == 0) {                return null;            }            in = new ZipFileInputStream(jzentry, this);        }	final ZipFileInputStream zfin = in;	switch (getMethod(jzentry)) {	case STORED:	    return zfin;	case DEFLATED:	    return new InflaterInputStream(zfin, getInflater()) {		private boolean isClosed = false;                		public void close() throws IOException {                    if (!isClosed) {                         releaseInflater(inf);                        this.in.close();                        isClosed = true;                    }		}		// Override fill() method to provide an extra "dummy" byte		// at the end of the input stream. This is required when		// using the "nowrap" Inflater option.		protected void fill() throws IOException {		    if (eof) {			throw new EOFException(			    "Unexpected end of ZLIB input stream");		    }		    len = this.in.read(buf, 0, buf.length);		    if (len == -1) {			buf[0] = 0;			len = 1;			eof = true;		    }		    inf.setInput(buf, 0, len);		}		private boolean eof;		public int available() throws IOException {		    if (isClosed)			return 0;		    return zfin.size() - inf.getTotalOut();		}	    };	default:	    throw new ZipException("invalid compression method");	}    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -