在应用程序中处理jar文件

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

本文的目的在于讲述如何通过程序处理jar文件,这与在命令行或者IDE中操作jar文件差别比较大。我们主要涉及到的内容是java.util.jar包以及java.io包的使用。

很多开发者对java.util.jar包并不熟悉,因此文章将主要讲述如何使用其中的8个类,其中JarFile和JarEntry类是核心类,他们分别代表了jar文件以及jar文件中的文件实体。通常我们可以通过如下方法构建JarFile的实例,有了JarFile的引用后我们就可以对其进行处理了。

JarFile(File file)

JarFileFile file, boolean verify)

JarFile(File file, boolean verify, int mode)

JarFile(String name)

JarFile(String name, boolean verify)

你可以使用File对象或者String类型的文件名来构建JarFile,例如JarFile jarFile = new JarFile("j2me.jar");得到这个引用后我们可以调用jarFile.entries()方法返回JarEntry对象的Enumeration。这样我们就可以操作他了。首先我们编写一个程序来浏览jar文件中的内容。

import java.io.*;

import java.util.*;

import java.util.jar.*;

public class ListJar {

public static void main(String args[]) {

for (int i=0, n=args.length; i<n; i++) {

try {

listjar(args[i]);

} catch (IOException e) {

System.err.PRintln("Problems reading: " + args[i]);

}

}

}

private static void listjar(String name)

throws IOException {

System.out.println("Jar: " + name);

JarFile jar = new JarFile(name);

Enumeration e = jar.entries();

while (e.hasMoreElements()) {

listInfo((JarEntry)e.nextElement());

}

System.out.println();

}

private static void listInfo(JarEntry entry) {

System.out.println("\t" + entry.getName());

}

}

程序的内容比较简单,我们编译通过后在相同的目录放置一个jar文件,然后执行java ListJar xxx.jar。下面是我执行后的结果:

C:\TEMP>java ListJar nts.jar

Jar: nts.jar

META-INF/

META-INF/MANIFEST.MF

CleanMIDlet.class

CleanWorker.class

DeluxeMIDlet.class

DeluxeWorker$1.class

DeluxeWorker.class

PrimitiveMIDlet.class

SimpleWaitMIDlet$1.class

SimpleWaitMIDlet.class

SingleMIDlet.class

SingleWorker.class

ThreadedMIDlet$1.class

ThreadedMIDlet.class

WaitCanvas$1.class

WaitCanvas.class

在我们的程序中不仅可以浏览这些文件,还可以对特定的文件进行读取。比如我想读取MANIFEST.MF中的内容,那么我们可以得到Attributes类,然后得到其中的内容。下面的方法可以读取MANIFEST.MF中属性为MIDlet-4的值。

private static void getManifest(String name) throws IOException

{

System.out.println("Jar: " + name);

JarFile jar = new JarFile(name);

Manifest mf = jar.getManifest();

System.out.println((mf==null)?"null manifest":mf.toString());

Attributes at = mf.getMainAttributes();

System.out.println(at.getValue("MIDlet-4"));

}

java.util.jar包中包含了很多处理jar文件的api,用户应该多参考java doc。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航