我从我的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名称的行。
感谢。
答案 0 :(得分:3)
Jar jar = new Jar(); //configure the jar object jar.execute();
查看here以获取有关您可以设置的参数的信息。
答案 1 :(得分:1)
我认为你无法添加新条目,因为你无法打开“追加”的jar包。我认为您必须创建一个新的jar文件并从旧文件复制条目,并添加您的条目。
答案 2 :(得分:0)
FileOutputStream stream = new FileOutputStream(this.packagePath);
此行将创建一个新的空文件。
要编辑jar文件,您需要备份旧版本并将其条目复制到新的jar文件中。