<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)站導航:
     
    主站蜘蛛池模板: 久久精品亚洲综合| 2022免费国产精品福利在线| 中文字幕亚洲电影| 狼友av永久网站免费观看 | 日韩国产免费一区二区三区| 人人爽人人爽人人片A免费| 亚洲AV日韩综合一区尤物| 亚洲精品无码不卡| 国产亚洲精品福利在线无卡一| 成人永久免费福利视频网站| 免费在线视频你懂的| 免费国产99久久久香蕉| 精品国产免费一区二区三区| 曰批全过程免费视频免费看| 亚洲国产精品无码久久九九大片| 亚洲人成在线免费观看| 亚洲国产精品人久久| 亚洲AV无码一区东京热| 亚洲日本va中文字幕久久| 在线观看亚洲av每日更新| 亚洲日韩精品无码专区网站| 国产免费av片在线无码免费看| 在线观看人成网站深夜免费| 欧美最猛性xxxxx免费| 国产大片线上免费观看| 中文字幕无码免费久久99| 曰批视频免费30分钟成人| 最近最新高清免费中文字幕| 久久久久久AV无码免费网站下载| 99久久成人国产精品免费 | 亚洲国产另类久久久精品黑人 | 国产成人无码精品久久久久免费| 亚洲av无码av在线播放| 豆国产96在线|亚洲| 久久久久亚洲国产AV麻豆 | 免费一级毛片不卡不收费| 免费一级毛片在线观看| 免费在线观看污网站| 亚洲精品乱码久久久久久蜜桃| 亚洲人成人网站在线观看| 久久久久亚洲AV成人网人人网站|