Jump to Real's How-to Main page

Extract a file from a Jar

The following snippet extract a file (mydb.mdb) from a jar.
import java.io.*;
import java.util.jar.*;
import java.util.zip.*;


public class ExtractFromJAR {

  public void extractMyMDBromJAR(String dest){
     try {
      String home = getClass().getProtectionDomain().
                    getCodeSource().getLocation().toString().
                    substring(6);
      JarFile jar = new JarFile(home);
      ZipEntry entry = jar.getEntry("mydb.mdb");
      File efile = new File(dest, entry.getName());

      InputStream in = 
         new BufferedInputStream(jar.getInputStream(entry));
      OutputStream out = 
         new BufferedOutputStream(new FileOutputStream(efile));
      byte[] buffer = new byte[2048];
      for (;;)  {
        int nBytes = in.read(buffer);
        if (nBytes <= 0) break;
        out.write(buffer, 0, nBytes);
      }
      out.flush();
      out.close();
      in.close();
     }
     catch (Exception e) {
      e.printStackTrace();
    }
  }

 public static void main(String args []){
     new ExtractFromJAR().extractMyMDBFromJAR(".");
 }

}
Grab this auto-run Jar if you want to try it.

To create an auto-run JAR, first create a manifest.mft

Manifest-Version: 1.0
Classpath: .\mydb.jar
Main-Class: ExtractFromJAR
Create the JAR
C:\jdk141\bin\jar cvfm mydb.jar manifest.mft ExtractFromJAR.class mydb.mdb
Run it ... and the mydb.mdb file should appear in the current directory.
java -jar mydb.jar

(A tip from Fred Hommersom) Your code reads:
String home = getClass().getProtectionDomain().
                 getCodeSource().getLocation().toString().substring(6);
 
I got a problem when the jar file was located in C:\Program Files\xyz due to the embedded space. So I modified the code to
String home = getClass().getProtectionDomain()
                   .getCodeSource().getLocation()
                      .getPath().replaceAll("%20", " ");

If you find this article useful, consider making a small donation
to show your support for this Web site and its content.

Written and compiled by Réal Gagnon ©1998-2005
[ home ]