<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)航:
     
    主站蜘蛛池模板: 亚洲AV无码一区二区三区国产| 免费无码又爽又刺激网站| 亚洲欧美自偷自拍另类视| 亚洲人成网站在线观看播放动漫| 中文字幕在线观看亚洲| 久久国产亚洲精品无码| 久久久久亚洲av无码专区导航| 亚洲av无码av制服另类专区| 亚洲av无码国产精品色午夜字幕| 好看的电影网站亚洲一区| 亚洲AV永久纯肉无码精品动漫| 亚洲AV日韩AV永久无码免下载| 亚洲av中文无码乱人伦在线r▽| 久久亚洲成a人片| 久久久亚洲欧洲日产国码二区 | 久久久久久AV无码免费网站| 免费观看在线禁片| 永久免费在线观看视频| 青青视频观看免费99| 亚洲毛片基地4455ww| 国产亚洲玖玖玖在线观看| 亚洲精品色播一区二区| 国产一区二区三区亚洲综合| 又大又硬又粗又黄的视频免费看| 三年片免费观看大全国语| 女同免费毛片在线播放| 久热中文字幕在线精品免费| 大地资源免费更新在线播放| 国产免费观看a大片的网站| 精品国产亚洲男女在线线电影| 亚洲国产精品乱码一区二区 | 国产亚洲日韩在线三区| 亚洲欧洲国产日韩精品| 亚洲1区1区3区4区产品乱码芒果| 亚洲精品av无码喷奶水糖心| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 日韩午夜免费视频| 亚洲午夜福利精品久久| 91大神亚洲影视在线| 亚洲日韩国产二区无码| 国产免费伦精品一区二区三区|