TA的每日心情  | 开心 2021-3-12 23:18 | 
|---|
 
  签到天数: 2 天 [LV.1]初来乍到  
 | 
 
| 
 
 本文的目的在于讲述如何通过程序处理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);  
          } catch (IOException e) {  
            System.err.println("Problems reading: " + args);  
          }  
        }  
      }  
  
      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("        " + 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。  
  
   
  
   
   
     
     
 
      
     
 
      
     
   
  
  
   
 
   
  
  
 
                        function TempSave(ElementID) 
                        { 
                                CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value); 
                                CommentsPersistDiv.save("CommentXMLStore"); 
                        } 
                        function Restore(ElementID) 
                        { 
                                CommentsPersistDiv.load("CommentXMLStore"); 
                                document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent"); 
                        } |   
 
 
 
 |