How to write a Java program which can extract a JAR file and store its data in specified directory (location)?
How to write a Java program which can extract a JAR file and store its data in specified directory (location)?
I have created a JAR file. Now, I created another Java program. I want to unpack that JAR file in some other directory, meaning I want to do something like unzip.
If I run jar -xf filename.jar
this causes some error:
Exception in thread "main" java.io.IOException: Cannot run program "jar": java.io.IOException: error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:459) at java.lang.Runtime.exec(Runtime.java:593)`
Answer by DigitalRoss for How to write a Java program which can extract a JAR file and store its data in specified directory (location)?
Your title doesn't seem to match the question very well but if you really do want to "write [a] java program extracting a jar file" you just need Class JarFile.
Answer by AVD for How to write a Java program which can extract a JAR file and store its data in specified directory (location)?
JarFile class.
JarFile file = new JarFile("file.jar"); for (Enumeration enum = file.entries(); enum.hasMoreElements();) { JarEntry entry = enum.next(); System.out.println(entry.getName()); }
Answer by JuanZe for How to write a Java program which can extract a JAR file and store its data in specified directory (location)?
Adapt this example: How to extract Java resources from JAR and zip archive
Or try this code:
Extract the Contents of ZIP/JAR Files Programmatically
Suppose
jarFile
is the jar/zip file to be extracted.destDir
is the path where it will be extracted:java.util.jar.JarFile jar = new java.util.jar.JarFile(jarFile); java.util.Enumeration enumEntries = jar.entries(); while (enumEntries.hasMoreElements()) { java.util.jar.JarEntry file = (java.util.jar.JarEntry) enumEntries.nextElement(); java.io.File f = new java.io.File(destDir + java.io.File.separator + file.getName()); if (file.isDirectory()) { // if its a directory, create it f.mkdir(); continue; } java.io.InputStream is = jar.getInputStream(file); // get the input stream java.io.FileOutputStream fos = new java.io.FileOutputStream(f); while (is.available() > 0) { // write contents of 'is' to 'fos' fos.write(is.read()); } fos.close(); is.close(); }
Source: http://www.devx.com/tips/Tip/22124
Answer by Arpit for How to write a Java program which can extract a JAR file and store its data in specified directory (location)?
You can use this code snippet as a reference to get your task done.Its almost the same as the code snippet shown above by @JuanZe except that for those who were getting the FileNotFoundException, i have added a small code snippet that will check if the file does exist and if it doesn't then it will create the parent folder along with the files and will extract the contents of jar file inside the specified destination folder.
Code snippet:
public class JarDemo { public static void main(String[] args) throws java.io.IOException { java.util.jar.JarFile jarfile = new java.util.jar.JarFile(new java.io.File("E:/sqljdbc4.jar")); //jar file path(here sqljdbc4.jar) java.util.Enumeration enu= jarfile.entries(); while(enu.hasMoreElements()) { String destdir = "E:/abc/"; //abc is my destination directory java.util.jar.JarEntry je = enu.nextElement(); System.out.println(je.getName()); java.io.File fl = new java.io.File(destdir, je.getName()); if(!fl.exists()) { fl.getParentFile().mkdirs(); fl = new java.io.File(destdir, je.getName()); } if(je.isDirectory()) { continue; } java.io.InputStream is = jarfile.getInputStream(je); java.io.FileOutputStream fo = new java.io.FileOutputStream(fl); while(is.available()>0) { fo.write(is.read()); } fo.close(); is.close(); } } }
Answer by Jamesst20 for How to write a Java program which can extract a JAR file and store its data in specified directory (location)?
Here is what I would do to extract my whole "resources" folder from my jar. It is way more faster to use BufferedReader and BufferedWriter.
public static boolean extractResourcesToTempFolder() { try { //If folder exist, delete it. String destPath = getTempDir() + File.separator + "JToolkit" + File.separator; deleteDirectoryRecursive(new File(destPath)); JarFile jarFile = new JarFile(JToolkit.class.getProtectionDomain().getCodeSource().getLocation().getPath()); Enumeration enums = jarFile.entries(); while (enums.hasMoreElements()) { JarEntry entry = enums.nextElement(); if (entry.getName().startsWith("resources")) { File toWrite = new File(destPath + entry.getName()); if (entry.isDirectory()) { toWrite.mkdirs(); continue; } InputStream in = new BufferedInputStream(jarFile.getInputStream(entry)); OutputStream out = new BufferedOutputStream(new FileOutputStream(toWrite)); 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(); } System.out.println(entry.getName()); } } catch (IOException ex) { Logger.getLogger(Methods.class.getName()).log(Level.SEVERE, null, ex); return false; } return true; }
Answer by Steve Cohen for How to write a Java program which can extract a JAR file and store its data in specified directory (location)?
You can use this very simple library to pack/unpack jar file
Very simple
import java.io.File; import java.util.List; import fr.stevecohen.jarmanager.JarUnpacker; class Test { JarUnpacker jarUnpacker = new JarUnpacker(); File myfile = new File("./myfile.jar"); File unpackDir = new File("./mydir"); List unpacked_files = jarUnpacker.unpack(myfile.getAbsolutePath(), unpackDir.getAbsolutePath()); }
You can also use maven dependency
fr.stevecohen.jarmanager JarManager 0.5.0
You also need my repository
repo-reapersoon ReaperSoon's repo http://repo-maven.stevecohen.fr
Check the last version with the link bellow to use the last dependency
Please use my public issue tracker if you find some bugs
Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\XAMPP INSTALLASTION\xampp\htdocs\endunpratama9i\www-stackoverflow-info-proses.php on line 72
0 comments:
Post a Comment