programming-examples/java/XML/JarInfo.java

154 lines
4.4 KiB
Java
Raw Normal View History

2019-11-15 12:59:38 +01:00
JarInfo
package com.ack.tools.jarinfo;
// zip imports
import java.io.IOException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
/**
* Reads the header part of a zip/jar file and creates
* an array of ZipEntry objects. JarInfo also allows to
* apply a filter to get the zip entries of their choice
*
* @see com.ack.tools.jarinfo.ZipEntryFilter
*/
public class JarInfo {
private Hashtable fEntries;
private String fZipFileName;
/**
* Use the JarInfoEntryFilter to selectively determine which
* ZipEntries a JarInfo object should be comprised of.
* @param the jar/zip file to interrogate
* @exception is thrown if any errors occur trying read the
* the jar/zip file
* @see com.ack.tools.jarinfo.ZipEntryFilter#accept
*/
public JarInfo( String fileName, ZipEntryFilter filter ) throws JarInfoException {
if( ( fZipFileName = fileName ) == null )
throw new JarInfoException( "supplied filename to JarInfo was null" );
if( filter == null )
throw new JarInfoException( "supplied filter to JarInfo was null for archive ->"
+ fZipFileName );
fEntries = new Hashtable();
ZipFile zipFile = null;
try {
// create a ZipFile for the supplied 'fileName'
zipFile = new ZipFile( fZipFileName );
// cycle through the header information with the zipFile
Enumeration e = zipFile.entries();
while( e.hasMoreElements() ) {
ZipEntry ze = (ZipEntry) e.nextElement();
// if we have a filter for JarInfo, apply it
if( filter.accept( ze ) == true )
fEntries.put( ze.getName(), ze );
}
}
catch( ZipException zipe ) {
throw new JarInfoException( "Zip format problems reading " + fZipFileName + "\n"
+ zipe.getMessage() );
}
catch( IOException ioe ) {
throw new JarInfoException( ioe.getMessage() );
}
catch( SecurityException se ) {
throw new JarInfoException( "Security problems reading " + fZipFileName + "\n"
+ se.getMessage() );
}
finally {
if( zipFile != null )
try {
zipFile.close();
}
catch( IOException ioe ) {
}
}
}
/**
* accessor method to get the name of the jar
* @return the jar/zip filename
*/
public String zipFileName() {
return fZipFileName;
}
/**
* accessor method to get a handle on the ZipEntries for JarInfo
* @return an Enumeration of the ZipEntries
*/
public Enumeration zipEntries() {
return fEntries.elements();
}
/**
* accessor method to get a handle on the zip entries name for JarInfo
* @return an Enumeration of the zip entries names
*/
public Enumeration zipEntryNames() {
return fEntries.keys();
}
/**
* accessor method to get a handle on the zip entry hashtable
* @return hashtable of zipEntryNames keys against zipEntry objects
*/
public Hashtable zipEntryTable() {
return fEntries;
}
/**
* method to determine whether a resource is within JarInfo
* @param the resource name to be checked
* @return whether resource is a part of JarInfo
*/
public boolean hasResource( String resource ) {
if( resource != null )
return fEntries.containsKey( resource );
return false;
}
/**
* accessor method to get a ZipEntry by name
* @param the name for the entry
* @return the ZipEntry if found, otherwise return null
*/
public ZipEntry getZipEntry( String zipEntryName ) {
ZipEntry entry = null;
if( zipEntryName != null )
entry = (ZipEntry) fEntries.get( zipEntryName );
return entry;
}
/**
* display the entries within JarInfo
* @return entries collapsed into a single string
*/
public String toString() {
StringBuffer buf = new StringBuffer();
Enumeration e = zipEntries();
while( e.hasMoreElements() ) {
ZipEntry ze = (ZipEntry) e.nextElement();
buf.append( "\n**************************\n" );
buf.append( "Zip Entry: " + ze.getName() + "\n" );
buf.append( "Zip Date: " + new java.util.Date( ze.getTime() ) + "\n" );
buf.append( "Zip Size: " + ze.getSize() + "\n" );
}
return buf.toString();
}
}