以编程方式创建JAR文件

时间:2009-11-11 17:54:36

标签: java jar

我从我的java代码创建了一个Jar文件:

public void create() throws IOException{
     FileOutputStream stream = new FileOutputStream(this.packagePath);
     JarOutputStream out = new JarOutputStream(stream, new Manifest());
     out.close();
     //jarFile = new JarFile(new File(this.packagePath));
}

我得到一个META-INF目录,里面有一个MANIFEST.MF文件。

现在,当我想将文件添加到jar文件时:

public void addFile(File file) throws IOException{

    //first, make sure the package already exists
    if(!file.exists()){
        throw new IOException("Make" +
                " sure the package file already exists.you might need to call the Package.create() " +
                "method first.");
    }

    FileOutputStream stream = new FileOutputStream(this.packagePath);
    JarOutputStream out = new JarOutputStream(stream);
    /*if(jarFile.getManifest()!=null){
        out = new JarOutputStream(stream,jarFile.getManifest());
    }else{
        out=new JarOutputStream(stream);
    }*/

    byte buffer[] = new byte[BUFFER_SIZE];     
    JarEntry jarEntry = new JarEntry(file.getName());
    jarEntry.setTime(file.lastModified());
    out.putNextEntry(jarEntry);

    //Write file to archive
    FileInputStream in = new FileInputStream(file);

    while (true) {
      int nRead = in.read(buffer, 0, buffer.length);
      if (nRead <= 0)
        break;
      out.write(buffer, 0, nRead);
    }
    in.close();     
    out.close();
}

使用上面的代码将文件添加到JAR存档时,带有MANIFEST.MF的META-INF目录消失了,我得到了新添加的文件。

我希望能够将文件添加到jar中,并且仍然可以获取清单文件。在清单文件中,我想要一个带有新添加的jar名称的行。

感谢。

3 个答案:

答案 0 :(得分:3)

  1. 在项目类路径中包含ant.jar
  2. 代码
    Jar jar = new Jar();
    //configure the jar object
    jar.execute();
  3. 查看here以获取有关您可以设置的参数的信息。

答案 1 :(得分:1)

我认为你无法添加新条目,因为你无法打开“追加”的jar包。我认为您必须创建一个新的jar文件并从旧文件复制条目,并添加您的条目​​。

答案 2 :(得分:0)

FileOutputStream stream = new FileOutputStream(this.packagePath);

此行将创建一个新的空文件。

要编辑jar文件,您需要备份旧版本并将其条目复制到新的jar文件中。