前段时间,我想找一个能在程序中直接更改Jar文件的办法,却一直没找到。只是找到了这种办法。翻译过来,和大家共享。
我们知道,用ZIP,jar可以将多个文件一起打包,如classes,images etc. 其实我们可以用J2SE的SDK提供的Jar命令来创建Jar文件,尽管我们可以通过该命令添加一个文件到Jar包中,但我们没有很直接的办法在程序中这么做,也没有办法通过Jar命令在Jar中删除一个或多个文件,
下面我们来研究一下如何更新一个Jar:要更新一个Jar,你必须创建原Jar文件的一个拷贝,在我们更新完拷贝后移除原文件,然后将拷贝重命名为原文件名就可以了。(译者注:我曾经试图找过更直接的办法,但是徒劳。只是找到这篇文章的原文) 对于添加一个或多个文件,删除一个或多个文件,思路应该是一样的。我们将举例更新一个Jar文件。
首先我们应该知道如何列出Jar文件中的Entries:
- JarFile jar = new JarFile(name);
- Enumeration e = jar.entries();
- while (e.hasMoreElements()) {
- System.out.println("\t" + entry.getName());
- }
然后我们要知道如何写入Jar文件
- while (entries.hasMoreElements()) {
- JarEntry entry = (JarEntry) entries.nextElement();
- InputStream is = jar.getInputStream(entry);
- newJar.putNextEntry(entry);
- while ((bytesRead = is.read(buffer)) != -1) {
- newJar.write(buffer, 0, bytesRead);
- }
- }
这里的输出是一个JarOutputStream
- File tempJar = File.createTempFile(nameOfJar, null);
- JarOutputStream newJar = new JarOutputStream(
- new FileOutputStream(tempJar));
在确定更新成功时,我们不要忘记删除原文件,并重新命名临时文件。
- if (success) {
- File origFile = new File(nameOfJar);
- origFile.delete();
- tempJar.renameTo(origFile);
- }
下边我们将给出完整的代码:
For more information on JAR files, see the Jar Files trail in The Java Tutorial.
|
|