Load resource from Jar file : JarFile « File « Java Tutorial






import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;


public final class JarResources {
  Hashtable htSizes = new Hashtable();
  Hashtable htJarContents = new Hashtable();
  private String jarFileName;
  public JarResources(String jarFileName) throws Exception {
    this.jarFileName = jarFileName;
    ZipFile zf = new ZipFile(jarFileName);
    Enumeration e = zf.entries();
    while (e.hasMoreElements()) {
      ZipEntry ze = (ZipEntry) e.nextElement();


      htSizes.put(ze.getName(), new Integer((int) ze.getSize()));
    }
    zf.close();

    // extract resources and put them into the hashtable.
    FileInputStream fis = new FileInputStream(jarFileName);
    BufferedInputStream bis = new BufferedInputStream(fis);
    ZipInputStream zis = new ZipInputStream(bis);
    ZipEntry ze = null;
    while ((ze = zis.getNextEntry()) != null) {
      if (ze.isDirectory()) {
        continue;
      }


      int size = (int) ze.getSize();
      // -1 means unknown size.
      if (size == -1) {
        size = ((Integer) htSizes.get(ze.getName())).intValue();
      }

      byte[] b = new byte[(int) size];
      int rb = 0;
      int chunk = 0;
      while (((int) size - rb) > 0) {
        chunk = zis.read(b, rb, (int) size - rb);
        if (chunk == -1) {
          break;
        }
        rb += chunk;
      }

      htJarContents.put(ze.getName(), b);
    }
  }

  public byte[] getResource(String name) {
    return (byte[]) htJarContents.get(name);
  }
  private String dumpZipEntry(ZipEntry ze) {
    StringBuffer sb = new StringBuffer();
    if (ze.isDirectory()) {
      sb.append("d ");
    } else {
      sb.append("f ");
    }

    if (ze.getMethod() == ZipEntry.STORED) {
      sb.append("stored   ");
    } else {
      sb.append("defalted ");
    }

    sb.append(ze.getName());
    sb.append("\t");
    sb.append("" + ze.getSize());
    if (ze.getMethod() == ZipEntry.DEFLATED) {
      sb.append("/" + ze.getCompressedSize());
    }

    return (sb.toString());
  }

  public static void main(String[] args) throws Exception {
    JarResources jr = new JarResources("a.jar");
    byte[] buff = jr.getResource("b.gif");
  }
}








11.63.JarFile
11.63.1.Creating a JAR File
11.63.2.Create JarFile and use Pack200.Packer
11.63.3.List all file names in a jar file
11.63.4.Listing the Entries of a JAR File Manifest
11.63.5.Listing the Main Attributes in a JAR File Manifest
11.63.6.Retrieves the manifest from a JAR file and writes the manifest contents to a file.
11.63.7.Get uncompressed and compressed file size in a Jar file
11.63.8.Get zip method: ZipEntry.STORED, ZipEntry.DEFLATED
11.63.9.Get CRC code for each file in a Jar file
11.63.10.Get file comment
11.63.11.Get resource from Jar file
11.63.12.JAR Archives: Jar Lister
11.63.13.JAR Archives: Packer200
11.63.14.JAR Archives: Unpacker200
11.63.15.Jar Entry OutputStream
11.63.16.Get jar file Attribute
11.63.17.Get the jar entry
11.63.18.Get the jar file
11.63.19.Search class in class path and Jar files
11.63.20.Add jar contents to the deployment archive under the given prefix
11.63.21.Manifest Writer
11.63.22.Make Temp Jar
11.63.23.Load resource from Jar file
11.63.24.A class to find resources in the classpath by their mime-type specified in the MANIFEST.