服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

在应用程序中处理jar文件

在应用程序中处理jar文件    本文的目的在于讲述如何通过程序处理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。

扫描关注微信公众号