<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

    在外國技術(shù)論壇看到一個使用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                     // 為了防止將完整文件名都放進(jìn)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 }




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

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

    Feedback

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

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

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

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


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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 四虎影院在线免费播放| 久久性生大片免费观看性| 成人免费视频网站www| 亚洲韩国—中文字幕| 久久久久免费精品国产| 亚洲人成中文字幕在线观看| 久久www免费人成精品香蕉| 中文字幕中韩乱码亚洲大片| 中文字幕免费在线视频| 亚洲啪啪AV无码片| 日韩精品无码免费一区二区三区 | 免费看成人AA片无码视频吃奶| 国产精品亚洲mnbav网站 | 国产亚洲欧美日韩亚洲中文色| 国产猛烈高潮尖叫视频免费| 美女黄色免费网站| 亚洲熟妇av一区二区三区漫画| 国产自国产自愉自愉免费24区| 亚洲人成电影福利在线播放| 毛片免费全部播放无码| 中文字幕亚洲码在线| 亚洲?v女人的天堂在线观看| 久久99精品免费一区二区| 97se亚洲综合在线| 免费看大黄高清网站视频在线| 成年网在线观看免费观看网址 | 男人的好看免费观看在线视频| 亚洲AV无码成人精品区狼人影院| 可以免费观看一级毛片黄a| 你懂的免费在线观看| 亚洲免费闲人蜜桃| 亚洲精品国产福利一二区| 日本免费在线观看| 亚洲日产乱码一二三区别| 亚洲第一永久AV网站久久精品男人的天堂AV | 国产人成网在线播放VA免费| 亚洲丝袜美腿视频| 午夜亚洲福利在线老司机| 三年片在线观看免费观看大全一| 亚洲成年网站在线观看| 亚洲午夜福利在线观看|