以编程方式将一个jar文件复制到另一个jar文件中

时间:2015-04-07 17:26:52

标签: java jar

我想使用以下代码

复制文件夹中的jar文件
   public static void copyJarFile(JarFile jarFile, File destDir) throws IOException {
       String fileName = jarFile.getName();
       String fileNameLastPart = fileName.substring(fileName.lastIndexOf(File.separator));
       File destFile = new File(destDir, fileNameLastPart);

       JarOutputStream jos = new JarOutputStream(new FileOutputStream(destFile));
       Enumeration<JarEntry> entries = jarFile.entries();

       while (entries.hasMoreElements()) {
           JarEntry entry = entries.nextElement();
           InputStream is = jarFile.getInputStream(entry);

           //jos.putNextEntry(entry);
           //create a new entry to avoid ZipException: invalid entry compressed size
           jos.putNextEntry(new JarEntry(entry.getName()));
           byte[] buffer = new byte[4096];
           int bytesRead = 0;
           while ((bytesRead = is.read(buffer)) != -1) {
               jos.write(buffer, 0, bytesRead);
           }
           is.close();
           jos.flush();
           jos.closeEntry();
       }
       jos.close();
   }

该计划运作良好。但是当目标不是目录而是jar文件时,则该程序不起作用。即我想将一个jar文件复制到另一个jar文件中。我怎么能以编程方式做到这一点?

2 个答案:

答案 0 :(得分:0)

Jar文件只是一个名为zip文件,具有特定的文件结构和.jar扩展名。因此,如果您能够使用此功能将所有内容转储到文件夹,并且该文件夹具有您正在查找的确切结构,则可以将该目录压缩为zip文件,然后重命名该zip文件whatever.jar代替whatever.zip

答案 1 :(得分:0)

当你说I want to copy one jar file into another jar file时,你的意思是什么?

假设原始原始jar名称为a.jar,并且您要创建b.jar。您是否希望a.jar中的所有项目都在b.jar内,就像它们一样?或者您希望b.jar包含名为a.jar的条目,该条目是a.jar的完整副本吗?

如果您只是希望b.jar包含a.jar中的所有项目,那么您当前的代码应该有效,尽管有更有效的方法可以实现此目的。如果这是你的意思,我建议你直接复制文件。

如果您想将整个a.jar添加到b.jar作为条目,而不是循环浏览a.jar中的条目,则只需从{{FileInputStream创建a.jar 1}}并从中读取。

InputStream is = new FileInputStream("a.jar");

jos.putNextEntry(new JarEntry("a.jar"));
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
    jos.write(buffer, 0, bytesRead);
}