<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    無為

    無為則可為,無為則至深!

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      190 Posts :: 291 Stories :: 258 Comments :: 0 Trackbacks

    在外國技術論壇看到一個使用Java API中的java.util.jar 類來創(chuàng)建和編譯Jar的小程序。我參照那個小程序,編寫了一個例子。創(chuàng)建一個Test.java并放在在pack目錄里,在文件所在目錄編譯Java源碼,這時將建立一個包含目錄中所有文件的所有JAR壓縮文件。源碼如下:
      1 import java.io.*;
      2 import java.util.*;
      3 import java.util.jar.*;
      4 
      5 public class Util {
      6     private String dirName = "D:/3000/compileTest";
      7     private String srcDirName = dirName + "/src";
      8     private String jarDirName = dirName + "/jar";
      9     
     10     public static void main(String[] args) {
     11         Util u = new Util();
     12         u.test();
     13     }
     14     
     15     public void test() {
     16         this.writeJavaSource();
     17         List srcList = new LinkedList();
     18         this.addFilesFromDirectory(new File(this.srcDirName), srcList, ".java");
     19         this.compileAll(srcList);
     20         this.createJar(this.jarDirName + "/test.jar"new File(this.srcDirName));
     21     }
     22 
     23     public void writeJavaSource() {
     24         File dir = new File(this.srcDirName + "/pack");
     25         if (!dir.isDirectory()) {
     26             dir.mkdir();
     27         }
     28         File file = new File(this.srcDirName + "/pack""Test.java");
     29         PrintWriter writer;
     30         try {
     31             writer = new PrintWriter(new FileWriter(file));
     32             writer.println("package pack;");
     33             writer.println();
     34     
     35             writer.println("public class Test {");
     36             writer.println(""tpublic void test() {");
     37             writer.println(""t"tSystem.out.println(""test"");");
     38             writer.println(""t}");
     39             writer.println("}");
     40             writer.close();
     41         } catch (IOException e) {
     42             e.printStackTrace();
     43         }
     44     }
     45 
     46     public void compileAll(List allFileNames) {
     47         Iterator it = allFileNames.iterator();
     48         String[] allFiles = new String[allFileNames.size()];
     49         int index = 0;
     50         while (it.hasNext()) {
     51             String currFilename = (String) it.next();
     52             System.out.println("Adding " + currFilename + " to compilation");
     53             allFiles[index++= currFilename;
     54         }
     55         System.out.println("Starting compilation process on " + index
     56                 + " files");
     57         long time0 = System.currentTimeMillis();
     58         int compileReturnCode = com.sun.tools.javac.Main.compile(allFiles);
     59         long time1 = System.currentTimeMillis();
     60         System.out.println((time1 - time0) + " milliseconds, "
     61                 + ((compileReturnCode == 0? "success" : "failure"));
     62     }
     63     public void addFilesFromDirectory(File directory, List allFiles, String extension) {
     64         File[] fileArray = directory.listFiles();
     65         for (int i=0; i<fileArray.length; i++) {
     66             File currFile = fileArray[i];
     67             if (currFile.isFile()) {
     68                 String name = currFile.getAbsolutePath();
     69                 if (name.endsWith(extension))
     70                     allFiles.add(name);
     71             }
     72             else
     73                 addFilesFromDirectory(currFile, allFiles, extension);
     74         }
     75     }
     76     
     77     public void addDirectoriesFromDirectory(File directory, List dirFiles) {
     78         File[] fileArray = directory.listFiles();
     79         for (int i=0; i<fileArray.length; i++) {
     80             File currFile = fileArray[i];
     81             if (!currFile.isFile()) {
     82                 String name = currFile.getAbsolutePath();
     83                 dirFiles.add(name);
     84                 addDirectoriesFromDirectory(currFile, dirFiles);
     85             }
     86         }
     87     }
     88 
     89     public void createJar(String jarName, File directory) {
     90         Manifest manifest = new Manifest();
     91         manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
     92         
     93         File jarFile = new File(jarName);
     94         try {
     95             OutputStream fileOut = new FileOutputStream(jarFile);
     96             JarOutputStream jarOut = new JarOutputStream(fileOut, manifest);
     97             
     98             createJar(jarOut, directory);
     99             jarOut.flush();
    100             jarOut.finish();
    101         }
    102         catch (Exception e) {
    103             e.printStackTrace();
    104         }
    105         System.out.println("Created " + jarName);
    106     }
    107     
    108     public void createJar(JarOutputStream jarOut, File directory) {
    109         try {
    110             File[] fileArray = directory.listFiles();
    111             byte buffer[] = new byte[1024];
    112             int bytesRead;
    113             for (int i=0; i<fileArray.length; i++) {
    114                 File currFile = fileArray[i];
    115                 if (currFile.isDirectory()) {
    116                     createJar(jarOut, currFile);
    117                 }
    118                 else {
    119                     String currFilename = currFile.getName();
    120                     // 為了防止將完整文件名都放進JAR中必須分離文件名為目錄和類名
    121 
    122                     String pathInJar = directory.getAbsolutePath();    
    123                     pathInJar = pathInJar.substring(this.srcDirName.length()+1);
    124                     
    125                     JarEntry entry = new JarEntry(pathInJar + "/" + currFilename);
    126                     jarOut.putNextEntry(entry);
    127                         entry.setMethod(JarEntry.DEFLATED);
    128     
    129                     File file = new File(directory, currFilename);
    130                     FileInputStream fis = new FileInputStream(file);
    131                     while ((bytesRead = fis.read(buffer)) != -1) {
    132                         jarOut.write(buffer, 0, bytesRead);
    133                     }
    134                     fis.close();
    135                     jarOut.flush();
    136                     jarOut.closeEntry();
    137                 }
    138             }
    139         } catch (IOException ex) {
    140             ex.printStackTrace();
    141         }
    142     }
    143 }




    凡是有該標志的文章,都是該blog博主Caoer(草兒)原創(chuàng),凡是索引、收藏
    、轉載請注明來處和原文作者。非常感謝。

    posted on 2007-09-15 15:09 草兒 閱讀(1360) 評論(3)  編輯  收藏

    Feedback

    # re: 在代碼中編譯和創(chuàng)建Jar 2007-09-15 18:55 千里冰封
    挺好用的.  回復  更多評論
      

    # re: 在代碼中編譯和創(chuàng)建Jar 2007-12-09 03:37 woloo
    fix:

    String pathInJar = directory.getAbsolutePath();
    ==>
    String pathInJar = currFile.getAbsolutePath();   回復  更多評論
      

    # re: 在代碼中編譯和創(chuàng)建Jar[未登錄] 2007-12-19 01:48 joe
    很好用,謝謝了。解決我的大問題了!  回復  更多評論
      


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 一区二区三区免费高清视频| 久久亚洲日韩精品一区二区三区| 免费又黄又爽又猛大片午夜 | 一级毛片在线免费视频| 中文字幕亚洲无线码| 真人做A免费观看| 日韩电影免费在线观看网址| 香蕉蕉亚亚洲aav综合| 免费看片A级毛片免费看| 国产一二三四区乱码免费| 亚洲AV无码乱码在线观看代蜜桃 | 亚洲av中文无码乱人伦在线咪咕| 亚洲免费在线视频| 国产亚洲午夜精品| 亚洲AV成人精品网站在线播放| 91视频国产免费| 日韩视频免费在线观看| 亚洲heyzo专区无码综合| 亚洲av午夜福利精品一区人妖| 成人黄动漫画免费网站视频| 久久久久久免费一区二区三区 | 成人免费777777被爆出| 亚洲国产成人久久精品大牛影视| 在线电影你懂的亚洲| 久久久久久毛片免费播放| 亚洲国产av一区二区三区丶| 亚洲美日韩Av中文字幕无码久久久妻妇| 亚洲精品在线免费观看视频| 三级黄色片免费看| 草久免费在线观看网站| 国产亚洲精品第一综合| 亚洲欧美日韩久久精品| 亚洲人成网站在线播放2019| 亚洲一区电影在线观看| 亚洲午夜电影在线观看| 亚洲国产视频网站| 亚洲综合激情五月丁香六月| 国产成人亚洲综合网站不卡| 亚洲熟女精品中文字幕| 午夜无码A级毛片免费视频| 国产在线一区二区综合免费视频 |