可以以编程方式更新Jar文件而无需重写整个文件吗?

可以使用jar命令更新JAR文件中的单个文件,如下所示:

 jar uf TicTacToe.jar images/new.gif 

有没有办法以编程方式执行此操作?

如果我使用JarOutputStream ,我必须重写整个jar文件,所以我想知道是否有类似的“随机访问”方式来做到这一点。 鉴于它可以使用jar工具完成,我曾预计会有类似的方式以编程方式执行它。

可以使用Java 7中提供的Zip文件系统提供程序更新JAR文件的一部分:

 import java.util.*; import java.net.URI; import java.nio.file.Path; import java.nio.file.*; public class ZipFSPUser { public static void main(String [] args) throws Throwable { Map env = new HashMap<>(); env.put("create", "true"); // locate file system by using the syntax // defined in java.net.JarURLConnection URI uri = URI.create("jar:file:/codeSamples/zipfs/zipfstest.zip"); try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) { Path externalTxtFile = Paths.get("/codeSamples/zipfs/SomeTextFile.txt"); Path pathInZipfile = zipfs.getPath("/SomeTextFile.txt"); // copy a file into the zip file Files.copy( externalTxtFile,pathInZipfile, StandardCopyOption.REPLACE_EXISTING ); } } } 

是的,如果你使用这个开源库,你也可以用这种方式修改它。

https://truevfs.java.net

 public static void main(String args[]) throws IOException{ File entry = new TFile("c:/tru6413/server/lib/nxps.jar/dir/second.txt"); Writer writer = new TFileWriter(entry); try { writer.write(" this is writing into a file inside an archive"); } finally { writer.close(); } }