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

📄 jarfile.java

📁 JAVA基本类源代码,大家可以学习学习!
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * @(#)JarFile.java	1.50 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.util.jar;import java.io.*;import java.util.*;import java.util.zip.*;import java.security.cert.Certificate;import java.security.AccessController;import sun.security.action.GetPropertyAction;import sun.security.util.ManifestEntryVerifier;import sun.misc.SharedSecrets;/** * The <code>JarFile</code> class is used to read the contents of a JAR file * from any file that can be opened with <code>java.io.RandomAccessFile</code>. * It extends the class <code>java.util.zip.ZipFile</code> with support * for reading an optional <code>Manifest</code> entry. The * <code>Manifest</code> can be used to specify meta-information about the * JAR file and its entries. * * @author  David Connelly * @version 1.50, 01/23/03 * @see	    Manifest * @see     java.util.zip.ZipFile * @see     java.util.jar.JarEntry * @since   1.2 */publicclass JarFile extends ZipFile {    private Manifest man;    private JarEntry manEntry;    private boolean manLoaded;    private JarVerifier jv;    private boolean jvInitialized;    private boolean verify;    private boolean computedHasClassPathAttribute;    private boolean hasClassPathAttribute;    // Set up JavaUtilJarAccess in SharedSecrets    static {        SharedSecrets.setJavaUtilJarAccess(new JavaUtilJarAccessImpl());    }    /**     * The JAR manifest file name.     */    public static final String MANIFEST_NAME = "META-INF/MANIFEST.MF";    /**     * Creates a new <code>JarFile</code> to read from the specified     * file <code>name</code>. The <code>JarFile</code> will be verified if     * it is signed.     * @param name the name of the JAR file to be opened for reading     * @exception IOException if an I/O error has occurred     * @exception SecurityException if access to the file is denied     *            by the SecurityManager     */    public JarFile(String name) throws IOException {	this(new File(name), true, ZipFile.OPEN_READ);    }    /**     * Creates a new <code>JarFile</code> to read from the specified     * file <code>name</code>.     * @param name the name of the JAR file to be opened for reading     * @param verify whether or not to verify the JarFile if     * it is signed.     * @exception IOException if an I/O error has occurred     * @exception SecurityException if access to the file is denied     *            by the SecurityManager      */    public JarFile(String name, boolean verify) throws IOException {        this(new File(name), verify, ZipFile.OPEN_READ);    }    /**     * Creates a new <code>JarFile</code> to read from the specified     * <code>File</code> object. The <code>JarFile</code> will be verified if     * it is signed.     * @param file the JAR file to be opened for reading     * @exception IOException if an I/O error has occurred     * @exception SecurityException if access to the file is denied     *            by the SecurityManager     */    public JarFile(File file) throws IOException {	this(file, true, ZipFile.OPEN_READ);    }    /**     * Creates a new <code>JarFile</code> to read from the specified     * <code>File</code> object.     * @param file the JAR file to be opened for reading     * @param verify whether or not to verify the JarFile if     * it is signed.     * @exception IOException if an I/O error has occurred     * @exception SecurityException if access to the file is denied     *            by the SecurityManager.     */    public JarFile(File file, boolean verify) throws IOException {	this(file, verify, ZipFile.OPEN_READ);    }    /**     * Creates a new <code>JarFile</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>.     *     * @param file the JAR file to be opened for reading     * @param verify whether or not to verify the JarFile if     * it is signed.     * @param mode the mode in which the file is to be opened     * @exception IOException if an I/O error has occurred     * @exception IllegalArgumentException     *            If the <tt>mode</tt> argument is invalid     * @exception SecurityException if access to the file is denied     *            by the SecurityManager     */    public JarFile(File file, boolean verify, int mode) throws IOException {	super(file, mode);	this.verify = verify;    }    /**     * Returns the JAR file manifest, or <code>null</code> if none.     *     * @return the JAR file manifest, or <code>null</code> if none     */    public Manifest getManifest() throws IOException {	if (!manLoaded) {	    // First look up manifest entry using standard name	    manEntry = getJarEntry(MANIFEST_NAME);	    if (manEntry == null) {		// If not found, then iterate through all the "META-INF/"		// entries to find a match.		String[] names = getMetaInfEntryNames();		if (names != null) {		    for (int i = 0; i < names.length; i++) {			if (MANIFEST_NAME.equals(                            names[i].toUpperCase(Locale.ENGLISH))) {			    manEntry = getJarEntry(names[i]);			    break;			}		    }		}	    }	    // If found then load the manifest	    if (manEntry != null) {		if (verify) {		    byte[] b = getBytes(manEntry); 		    man = new Manifest(new ByteArrayInputStream(b));		    jv = new JarVerifier(man, b);		} else {		    man = new Manifest(super.getInputStream(manEntry));		}	    }	    manLoaded = true;	}	return man;    }    private native String[] getMetaInfEntryNames();    /**     * Returns the <code>JarEntry</code> for the given entry name or     * <code>null</code> if not found.     *     * @param name the JAR file entry name     * @return the <code>JarEntry</code> for the given entry name or     *         <code>null</code> if not found.     * @see java.util.jar.JarEntry     */    public JarEntry getJarEntry(String name) {	return (JarEntry)getEntry(name);    }    /**     * Returns the <code>ZipEntry</code> for the given entry name or     * <code>null</code> if not found.     *     * @param name the JAR file entry name     * @return the <code>ZipEntry</code> for the given entry name or     *         <code>null</code> if not found     * @see java.util.zip.ZipEntry     */    public ZipEntry getEntry(String name) {	ZipEntry ze = super.getEntry(name);	if (ze != null) {	    return new JarFileEntry(ze);	}	return null;    }    /**     * Returns an enumeration of the ZIP file entries.     */    public Enumeration entries() {	final Enumeration enum = super.entries();	return new Enumeration() {	    public boolean hasMoreElements() {		return enum.hasMoreElements();	    }	    public Object nextElement() {		ZipEntry ze = (ZipEntry)enum.nextElement();		return new JarFileEntry(ze);	    }	};    }    private class JarFileEntry extends JarEntry {	JarFileEntry(ZipEntry ze) {	    super(ze);	}	public Attributes getAttributes() throws IOException {	    Manifest man = JarFile.this.getManifest();	    if (man != null) {		return man.getAttributes(getName());	    } else {		return null;	    }	}	public java.security.cert.Certificate[] getCertificates() {            try {                maybeInstantiateVerifier();            } catch (IOException e) {                throw new RuntimeException(e);            }	    if (certs == null && jv != null) {		Certificate[] cs = jv.getCerts(getName());		if (cs != null) {		    certs = (Certificate[])cs.clone();

⌨️ 快捷键说明

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