0

我想将 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);

               }
             }
         }
     }
   }
4

2 回答 2

0

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

于 2013-07-18T21:08:22.860 回答
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();
        }

    }
}
于 2013-07-18T21:36:14.177 回答