用于将所有文件从jar提取到给定位置的Java代码

时间:2013-07-18 21:04:23

标签: java

我想将jar文件中的所有文件复制到当前目录之外。

这是我的代码。它在jar中写入所有文件名,所以..但是我想把jar里面的所有文件复制到jar外面。

import java.io.*;
import java.util.Enumeration;
import java.util.jar.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

   public class JarRead 
   {
     public static void main (String args[]) throws IOException 
     {
         ZipFile file = new ZipFile("jarfile.jar");
         if (file != null) {
            Enumeration<? extends ZipEntry> entries = file.entries(); 

            if (entries != null) {
               while (entries.hasMoreElements()) {
                   ZipEntry entry = entries.nextElement();
                   System.out.println(entry);

               }
             }
         }
     }
   }

2 个答案:

答案 0 :(得分:0)

您不需要编写Java程序来执行此操作。您可以使用shell脚本。您可以只unzip jar文件,然后find目录中的文件,mv将它们放入您拥有的目录中。

答案 1 :(得分:0)

这是一个执行此操作的类。您可能需要对其进行一些修改。

public class HtDocsExtractor {
    private final String htDocsPath;

    public HtDocsExtractor(String htDocsPath) {
        this.htDocsPath = htDocsPath;
    }

    public void extract() throws Exception {

        InputStream is = HtDocsExtractor.class.getResourceAsStream("/htdocs.zip");
        ZipInputStream zis = new ZipInputStream(is);
        try {
            byte[] buf = new byte[8192];
            ZipEntry zipentry;

            zipentry = zis.getNextEntry();
            while (zipentry != null) {
                String entryName = htDocsPath + zipentry.getName();
                entryName = entryName.replace('/', File.separatorChar);
                entryName = entryName.replace('\\', File.separatorChar);
                int n;
                File newFile = new File(entryName);
                if (zipentry.isDirectory()) {
                    if (!newFile.exists() && !newFile.mkdirs()) {
                        throw new Exception("Could not create directory: " + newFile);
                    }
                    zipentry = zis.getNextEntry();
                }
                else {
                    FileOutputStream fos = new FileOutputStream(entryName);
                    try {
                        while ((n = zis.read(buf)) > 0) {
                            fos.write(buf, 0, n);
                        }
                    } finally {
                        fos.close();
                    }
                    zis.closeEntry();
                    zipentry = zis.getNextEntry();
                }
            }
        } finally {
            zis.close();
        }

    }
}