隨筆-22  評論-6  文章-17  trackbacks-0
          環境變量的配置:
          CLASSPATH = .; %JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
          JAVA_HOME = C:\AppServer\jdk\

          Path????? = %JAVA_HOME%\bin

          step1. 下載 JAVA 2 SDK (JDK)

          首先連上http://java.sun.com/j2se/downloads.html
          之後點選右邊的 Popular Downloads 下載 J2SE 1.4.2 SDK
          Download J2SE v 1.4.2_04 ( 目前最新版是J2SE 1.4.2_04 )
          依您作業系統環境點選不同版本的 SDK 下載
          注意!是SDK不是JRE


          step2. 設定環境變數

          按照其指示安裝完成之後,我們必須先設定環境變數. PATH , CLASSPATH

          設定 PATH , 告訴系統 , javac.exe 和 java.exe 的所在位置

          到 我的電腦 按滑鼠右鍵, 點選內容, 進入進階, 在下方有一個環境變數
          進入之後 , 可以看到上下兩大部分 , 我們要設定的是下面的 系統變數 部分
          找到變數 Path
          假設SDK是安裝在 C:\j2sdk1.4.2_04 (預設目錄)
          選擇編輯 , 在最前面加上 C:\j2sdk1.4.2_04\bin; (Path是用;來區隔)
          您要根據實際的JDK安裝目錄而調整
          套用並確定之後 , 無論您的命令提示字元工作目錄是哪一個位置 ,
          都可以執行 javac指令 或是 java 指令
          測試方法:將命令提示字元工作目錄設定到隨便一個您系統中的目錄

          1
          C:\>cd c:\java_program

          執行下列指令
          1
           C:\java_program>javac

          系統會提供給您一些下javac指令的參數訊息 .
          表示 PATH 設定成功


          step3. 動手寫第一個程式
          [color=black]
          寫java程式 , 不安裝任何編輯器的時候最簡單的工具就是記事本,
          現在就來寫出您第一個java程式吧!

          1
          2
          3
          4
          5
          6
          7
          8
          publicclass HelloWorld
                    {publicstaticvoid main(String args[])
                         {
                              System.out.println(" Hello World ! ");
                         }}

          注意檔案的儲存! 使用另存新檔比較方便
          檔名 HelloWorld.java
          存檔類型請選擇 所有檔案 , 否則記事本將會將檔案加上 .txt 的副檔名,而不是 .java檔了
          編碼不變 , 就是 ANSI

          為了保險起見 , 請取消 windows 的隱藏副檔名之選項來確認您的副檔名是否為.java
          假設我們將 HelloWorld.java 存在 C:\java2裡面
          [/color]

          step4. 編譯 HelloWorld.java

          到命令提示字元底下
          ( windows NT, 2000, XP叫命令提示字元, 而之前的windows則叫MS-DOS )
          輸入以下指令 , 設定 命令提示字元的工作目錄 等於 C:\java2

          1
          C:\>cd c:\java2

          接著執行下面的編譯指令
          1
          C:\java2>javac HelloWorld.java

          注意 HelloWorld 的大小寫
          編譯若成功則您會在 C:\java2 看到 HelloWorld.class 這個檔


          step5. 執行 HelloWorld


          JDK會依照 CLASSPATH 的設定來尋找 .class檔案
          新版本的JDK(1.3之後)會將 命令提示字元工作目錄 作為預設CLASSPATH的一部份.
          在 step4 我們將 工作目錄 設定到 C:\java2 ,
          所以在C:\java2 , 可以直接使用 java指令 執行程式
          JDK會依照預設的CLASSPATH設定值 , 去 C:\java2 找 .class檔案

          1
          C:\java2>java HelloWorld

          您就會看到 Hello World !
          不要輸入 副檔名.class , 那是多餘的.


          但是你將工作目錄移到別的地方 , 例如 C:\
          執行

          1
          C:\>java HelloWorld

          是無法成功的 ,
          因為 JDK會去尋找 C:\ (工作目錄) , 它不知道要去找 C:\java2 , 所以不會去找
          找不到 HelloWorld.class , 它就會給一個 java.lang.NoClassDefFoundError

          沒有辦法解決嗎? 如果工作目錄在 C:\
          可不可以讓JDK去找 C:\java2 這個目錄下的.class檔案
          當然可以
          只要將 C:\java2 加入到 CLASSPATH 的一部份就行了.

          jar
          制作可以執行的?JAR?文件包及?jar?命令詳解----作

          By?niyongy 發表于 2005-10-19 12:19:00

          ?制作可以執行的 JAR 文件包及 jar 命令詳解----作
          問這樣的問題的人真不少,沒辦法一直都不想以主題帖來發的,現在還是發出來吧,以下是轉載的全文:
          常常在網上看到有人詢問:如何把 java 程序編譯成 .exe 文件。通?;卮鹬挥袃煞N,一種是說,制作一個可執行的 JAR 文件包,就可以像.chm 文檔一樣雙擊運行了;而另一種回答,則是使用 JET 來進行編譯。但是 JET 是要用錢買的,而且,據說 JET 也不是能把所有的 Java 程序都編譯成執行文件,性能也要打些折扣。所以,使用制作可執行 JAR 文件包的方法就是最佳選擇了,何況它還能保持 Java 的跨平臺特性。先來看看什么是 JAR 文件包:

          1. JAR 文件包

            JAR 文件就是 Java Archive File,顧名思意,它的應用是與 Java 息息相關的,是 Java 的一種文檔格式。JAR 文件非常類似 ZIP 文件??準確的說,它就是 ZIP 文件,所以叫它文件包。JAR 文件與 ZIP 文件唯一的區別就是在 JAR 文件的內容中,包含了一個 META-INF/MANIFEST.MF 文件,這個文件是在生成 JAR 文件的時候自動創建的。舉個例子,如果我們具有如下目錄結構的一些文件:

            ==
            `-- test
              `-- Test.class

            把它壓縮成 ZIP 文件 test.zip,則這個 ZIP 文件的內部目錄結構為:

            test.zp
            `-- test
              `-- Test.class

            如果我們使用 JDK 的 jar 命令把它打成 JAR 文件包 test.jar,則這個 JAR 文件的內部目錄結構為:

            test.jar
            |-- META-INF
            |  `-- MANIFEST.MF
            `-- test
              `--Test.class


          2. 創建可執行的 JAR 文件包

            制作一個可執行的 JAR 文件包來發布你的程序是 JAR 文件包最典型的用法。

            Java 程序是由若干個 .class 文件組成的。這些 .class 文件必須根據它們所屬的包不同而分級分目錄存放;運行前需要把所有用到的包的根目錄指定給 CLASSPATH 環境變量或者 java 命令的 -cp 參數;運行時還要到控制臺下去使用 java 命令來運行,如果需要直接雙擊運行必須寫 Windows 的批處理文件 (.bat) 或者 Linux 的 Shell 程序。因此,許多人說,Java 是一種方便開發者苦了用戶的程序設計語言。

            其實不然,如果開發者能夠制作一個可執行的 JAR 文件包交給用戶,那么用戶使用起來就需要方便了。在 Windows 下安裝 JRE (Java Runtime Environment) 的時候,安裝文件會將 .jar 文件映射給 javaw.exe 打開。那么,對于一個可執行的 JAR 文件包,用戶只需要雙擊它就可以運行程序了,和閱讀 .chm 文檔一樣方便 (.chm 文檔默認是由 hh.exe 打開的)。那么,現在的關鍵,就是如何來創建這個可執行的 JAR 文件包。

            創建可執行的 JAR 文件包,需要使用帶 cvfm 參數的 jar 命令,同樣以上述 test 目錄為例,命令如下:

            jar cvfm test.jar manifest.mf test

            這里 test.jar 和 manifest.mf 兩個文件,分別是對應的參數 f 和 m,其重頭戲在 manifest.mf。因為要創建可執行的 JAR 文件包,光靠指定一個 manifest.mf 文件是不夠的,因為 MANIFEST 是 JAR 文件包的特征,可執行的 JAR 文件包和不可執行的 JAR 文件包都包含 MANIFEST。關鍵在于可執行 JAR 文件包的 MANIFEST,其內容包含了 Main-Class 一項。這在 MANIFEST 中書寫格式如下:

            Main-Class: 可執行主類全名(包含包名)

            例如,假設上例中的 Test.class 是屬于 test 包的,而且是可執行的類 (定義了 public static void main(String[]) 方法),那么這個 manifest.mf 可以編輯如下:

            Main-Class: test.Test <回車>

            這個 manifest.mf 可以放在任何位置,也可以是其它的文件名,只需要有 Main-Class: test.Test 一行,且該行以一個回車符結束即可。創建了 manifest.mf 文件之后,我們的目錄結構變為:

            ==
            |-- test
            |  `-- Test.class
            `-- manifest.mf

            這時候,需要到 test 目錄的上級目錄中去使用 jar 命令來創建 JAR 文件包。也就是在目錄樹中使用“==”表示的那個目錄中,使用如下命令:

            jar cvfm test.jar manifest.mf test

            之后在“==”目錄中創建了 test.jar,這個 test.jar 就是執行的 JAR 文件包。運行時只需要使用 java -jar test.jar 命令即可。

            需要注意的是,創建的 JAR 文件包中需要包含完整的、與 Java 程序的包結構對應的目錄結構,就像上例一樣。而 Main-Class 指定的類,也必須是完整的、包含包路徑的類名,如上例的 test.Test;而且在沒有打成 JAR 文件包之前可以使用 java <類名> 來運行這個類,即在上例中 java test.Test 是可以正確運行的 (當然要在 CLASSPATH 正確的情況下)。


          3. jar 命令詳解

            jar 是隨 JDK 安裝的,在 JDK 安裝目錄下的 bin 目錄中,Windows 下文件名為 jar.exe,Linux 下文件名為 jar。它的運行需要用到 JDK 安裝目錄下 lib 目錄中的 tools.jar 文件。不過我們除了安裝 JDK 什么也不需要做,因為 SUM 已經幫我們做好了。我們甚至不需要將 tools.jar 放到 CLASSPATH 中。

            使用不帶任何的 jar 命令我們可以看到 jar 命令的用法如下:

            jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...

            其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一個,它們分別表示:

            -c 創建新的 JAR 文件包
            -t 列出 JAR 文件包的內容列表
            -x 展開 JAR 文件包的指定文件或者所有文件
            -u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)

            [vfm0M] 中的選項可以任選,也可以不選,它們是 jar 命令的選項參數

            -v 生成詳細報告并打印到標準輸出
            -f 指定 JAR 文件名,通常這個參數是必須的
            -m 指定需要包含的 MANIFEST 清單文件
            -0 只存儲,不壓縮,這樣產生的 JAR 文件包會比不用該參數產生的體積大,但速度更快
            -M 不產生所有項的清單(MANIFEST〕文件,此參數會忽略 -m 參數

            [jar-文件] 即需要生成、查看、更新或者解開的 JAR 文件包,它是 -f 參數的附屬參數
            [manifest-文件] 即 MANIFEST 清單文件,它是 -m 參數的附屬參數

            [-C 目錄] 表示轉到指定目錄下去執行這個 jar 命令的操作。它相當于先使用 cd 命令轉該目錄下再執行不帶 -C 參數的 jar 命令,它只能在創建和更新 JAR 文件包的時候可用。
            文件名 ... 指定一個文件/目錄列表,這些文件/目錄就是要添加到 JAR 文件包中的文件/目錄。如果指定了目錄,那么 jar 命令打包的時候會自動把該目錄中的所有文件和子目錄打入包中。

            下面舉一些例子來說明 jar 命令的用法:

            1) jar cf test.jar test

            該命令沒有執行過程的顯示,執行結果是在當前目錄生成了 test.jar 文件。如果當前目錄已經存在 test.jar,那么該文件將被覆蓋。

            2) jar cvf test.jar test

            該命令與上例中的結果相同,但是由于 v 參數的作用,顯示出了打包過程,如下:

            標明清單(manifest)
            增加:test/(讀入= 0) (寫出= 0)(存儲了 0%)
            增加:test/Test.class(讀入= 7) (寫出= 6)(壓縮了 14%)

            3) jar cvfM test.jar test

            該命令與 2) 結果類似,但在生成的 test.jar 中沒有包含 META-INF/MANIFEST 文件,打包過程的信息也略有差別:

            增加:test/(讀入= 0) (寫出= 0)(存儲了 0%)
            增加:test/Test.class(讀入= 7) (寫出= 6)(壓縮了 14%)

            4) jar cvfm test.jar manifest.mf test

            運行結果與 2) 相似,顯示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 內容不同,是包含了 manifest.mf 的內容

            5) jar tf test.jar

            在 test.jar 已經存在的情況下,可以查看 test.jar 中的內容,如對于 2) 和 3) 生成的 test.jar 分別應該此命令,結果如下;

            對于 2)

            META-INF/
            META-INF/MANIFEST.MF
            test/
            test/Test.class

            對于 3)

            test/
            test/Test.class

            6) jar tvf test.jar

            除顯示 5) 中顯示的內容外,還包括包內文件的詳細信息,如:

               0 Wed Jun 19 15:39:06 GMT 2002 META-INF/
              86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF
               0 Wed Jun 19 15:33:04 GMT 2002 test/
               7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class

            7) jar xf test.jar

            解開 test.jar 到當前目錄,不顯示任何信息,對于 2) 生成的 test.jar,解開后的目錄結構如下:

            ==
            |-- META-INF
            |  `-- MANIFEST
            `-- test
              `-- Test.class

            8) jar xvf test.jar

            運行結果與 7) 相同,對于解壓過程有詳細信息顯示,如:

             創建:META-INF/
            展開:META-INF/MANIFEST.MF
             創建:test/
            展開:test/Test.class

            9) jar uf test.jar manifest.mf

            在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 來查看 test.jar 可以發現 test.jar 中比原來多了一個 manifest。這里順便提一下,如果使用 -m 參數并指定 manifest.mf 文件,那么 manifest.mf 是作為清單文件 MANIFEST 來使用的,它的內容會被添加到 MANIFEST 中;但是,如果作為一般文件添加到 JAR 文件包中,它跟一般文件無異。

            10) jar uvf test.jar manifest.mf

            與 9) 結果相同,同時有詳細信息顯示,如:

            增加:manifest.mf(讀入= 17) (寫出= 19)(壓縮了 -11%)


          4. 關于 JAR 文件包的一些技巧

            1) 使用 unzip 來解壓 JAR 文件

            在介紹 JAR 文件的時候就已經說過了,JAR 文件實際上就是 ZIP 文件,所以可以使用常見的一些解壓 ZIP 文件的工具來解壓 JAR 文件,如 Windows 下的 WinZip、WinRAR 等和 Linux 下的 unzip 等。使用 WinZip 和 WinRAR 等來解壓是因為它們解壓比較直觀,方便。而使用 unzip,則是因為它解壓時可以使用 -d 參數指定目標目錄。

            在解壓一個 JAR 文件的時候是不能使用 jar 的 -C 參數來指定解壓的目標的,因為 -C 參數只在創建或者更新包的時候可用。那么需要將文件解壓到某個指定目錄下的時候就需要先將這具 JAR 文件拷貝到目標目錄下,再進行解壓,比較麻煩。如果使用 unzip,就不需要這么麻煩了,只需要指定一個 -d 參數即可。如:

            unzip test.jar -d dest/

            2) 使用 WinZip 或者 WinRAR 等工具創建 JAR 文件

            上面提到 JAR 文件就是包含了 META-INF/MANIFEST 的 ZIP 文件,所以,只需要使用 WinZip、WinRAR 等工具創建所需要 ZIP 壓縮包,再往這個 ZIP 壓縮包中添加一個包含 MANIFEST 文件的 META-INF 目錄即可。對于使用 jar 命令的 -m 參數指定清單文件的情況,只需要將這個 MANIFEST 按需要修改即可。

            3) 使用 jar 命令創建 ZIP 文件

            有些 Linux 下提供了 unzip 命令,但沒有 zip 命令,所以需要可以對 ZIP 文件進行解壓,即不能創建 ZIP 文件。如要創建一個 ZIP 文件,使用帶 -M 參數的 jar 命令即可,因為 -M 參數表示制作 JAR 包的時候不添加 MANIFEST 清單,那么只需要在指定目標 JAR 文件的地方將 .jar 擴展名改為 .zip 擴展名,創建的就是一個不折不扣的 ZIP 文件了,如將上一節的第 3) 個例子略作改動:

            jar cvfM test.zip test


          初學者 學好JAVA最關鍵幾點

          轉貼自www.csdn.net

          第一個是path 和 CLASSPATH的問題
          第二個是package和import問題

          第三個是public,protected,private,static,什 么時候用,為什么要用,怎么用

          第四個是制作jar文件



          第一個,path 和 CLASSPATH的問題

          什么是path

          是你的JDK的工作路徑

          例如 你的jdk安裝在C:/jdk/ 此時的你的path(如果原來沒有PATH)設置為 PATH ;C:/jdk/ bin

          什么是Classpath

          Classpath是Java中的重要概念,它描述了Java虛擬機在運行一個Class時在哪些路徑中加載要運行的類以及運行的類要用到的類。簡單的說,當一個程序找不到他所需的其他類文件時,系統會自動到CLASSPATH環境變量所指明的路徑中去查找第三方提供的類和用戶定義的類,

          Classpath和Java包的關系

          Java的包(Package)和classpath關系密切。包是以“.”分割的,SUN建議使用域名的逆向排列來區分不同的包,以避免沖突,如com.company.util。在一個包里的類在存儲的時候需要存儲在和包名相同的目錄里,如上述com.company.util包中的 Sample.class,要存儲在com\company\util目錄中。
          Classpath有兩種表達方式,一種是指向目錄的classpath,如C:\work\classes,表示C:\work\ classes目錄是一個classpath條目;另一種方式是指向壓縮文件的classpath,如C:\work\util.jar,表示C:\ work\util.jar文件是一個classpath條目,任何一個包含Java類的zip格式的壓縮文件都可以作為classpath的條目。
          那么classpath和包到底是什么關系呢?簡單的說,就是Java虛擬機在加載類的時候以這樣一種方式查找具體的類文件: classpath+包存儲的目錄+具體的類文件。如classpath中有一個c:\work\classes條目,需要加載的類是 com.company.util.Sample.class,那么在加載這個類的時候,虛擬機會查找c:\work\classes\com\ company\util目錄,如果Sample.class在這個目錄中,虛擬機就可以找到,如果這個類不在這個目錄中,同時也不在任何一個其它 classpath中,那么虛擬機會拋出一個ClassNotFoundException。

          Classpath的順序和類版本沖突

          Java虛擬機在加載類的時候查找classpath是有順序的,如果在classpath中有多個條目都有同一個名稱的類,那么在較前位置的類會被加載,后面的會被忽略。這種按照順序的類加載可能會導致類的版本沖突。例如classpath=c:\servlet2.2\ servlet.jar;c:\servlet2.3\servlet.jar,那么在實際應用的過程中,你使用的是servlet2.2,而不是 servlet2.3。很多時候如果不注意這一點,可能會導致奇怪的異常。

          命令行狀態下的classpath設置

          命令行狀態下的classpath可以通過兩種方式設置。
          一種是直接設置環境變量,例如在windows環境下,我們使用set命令:
          set classpath=c:\work\classes;c:\work\util.jar
          另一種方式是在執行javac、java或者其它Java命令時直接指定classpath:
          java -classpath c:\work\classes;c:\work\util.jar com.company.util.Sample

          二 package和import問題

          Java中的包(Package)其實指的就是目錄,它是為了更好地管理Java類(Class)和接口(Interface)。Java語言的包可以被另一個Java開發包所使用。如果我們要引用某個包中的類,用import關鍵字來標明即可,Package行要在 import 行之前 , Package打包后將生成在Classpath 指明的路徑下
          例如 Classpath 為 C:/test
          Package com.dir
          結果為 將在C:/test目錄下生成com子目錄,目錄com包含dir目錄 所有的文件將放在dir目錄

          在Java中對象的體現在包的定義和應用中,對于已經編好的類,如果在新類中要使用,應將已經定義的類包含近來,Java中用import語句實現.
          使用import 語句的加入所有類(以上面Package打包為例)
          import com.dir.*;

          使用import 語句的加入特指類(以上面Package打包為例,假如目錄中存在hello.class)

          import com.dir.hello;

          第三,public,protected,private,static,什 么時候用,為什么要用,怎么用

          每個類都創造了有自己的名字空間,指方法和變量可以知道彼此的存在,可以使用。
          public類不但可以被同一程序包中的其它類使用,別的程序包中的類也可以使用;
          變量和方法的修飾字public、protected、private:
          public:任何其他類、對象只要可以看到這個類的話,那么它就可以存取變量的數據,或使用方法。
          class ABC{
          public int pub_i=5;
          public void show)(){
          System.out.println("pub_i"+pub_i);
          }
          class Demo{
          public static void main(String args[]){
          ABC abc=new ABC();
          System.out.println("abc.pub_i"+abc.pub_i);
          abc.pub_i=10;
          abc.show();
          }
          }
          protected變量和方法:
          如果一個類中變量或方法有修飾字protected,同一類、同一包可以使用。不同包的類要使用,必須是該類的子類,可以存取變量或調用。
          public class ABC{
          protected int pro_i=5;
          protected void show(){
          System.out.println("pro_i=" +pro_i);}
          }
          同包的類:
          class DEF{
          public static void main(String args[]){
          ABC abc=new ABC();
          System.out.println("abc.pro_i="+abc.pro_i);
          abc.pub_i=10;
          abc.show();
          }
          }
          不同包但是是子類:
          import mytest.pack.ABC;
          class DEF extends ABC{
          public static void main(String agrs[]){
          DEF def=new DEF();
          System.out.println(def.i);
          def.i=10;
          def.show();}
          }
          private不允許任何其他類存取和調用;
          當子類中的變量名與父類的相同,原來的變量被遮蓋。
          方法的覆蓋(overriding)和重載(overloading)。子孫類中定義的方法和祖先類中某個方法同名、同參數行,則祖先類中的該方法被覆蓋;方法的重載是指一個對象的多態性,即多個方法用相同的名稱,但參數行不同。
          final:
          final在方法之前,防止該方法被覆蓋;
          final在類之前,標是該類不能被繼承;
          final在變量之前,定義一個常量。
          static:
          在變量或方法之前,表明它們是屬于類的;
          靜態變量在各實例間共享,如果是public靜態變量,則其它類可以不通過實例化訪問它們;
          靜態方法稱為類的方法,因此不用實例化即可調用(面向過程)
          一個對象的方法可以訪問對象的數據成員,盡管不屬于方法的局部變量;一個類的方法只能訪問自己的局部變量。
          例:不正確的引用
          class StaticError{
          String mystring="hello";
          public static void main(String args[]){
          System.out.println(mystring);}
          }
          錯誤信息:can’t make a static reference to nonstatic variable.
          為什么不正確?只有對象的方法可以訪問對象的變量。
          解決的辦法:
          1) 將變量改稱類變量
          class StaticError{
          static String mystring="hello";
          public static void main(String args[]){
          System.out.println(mystring);}
          }
          2) 先創建一個類的實例
          class NoStaticError{
          public static void main(String args[]){
          String mystring="hello";
          System.out.println(mystring);}
          }
          }

          第四個,制作jar文件

          JAR 文件就是 Java Archive File,顧名思意,它的應用是與 Java 息息相關的,是 Java 的一種文檔格式。 JAR 文件非常類似 ZIP 文件??準確的說,它就是 ZIP 文件,所以叫它文件包。JAR 文件與 ZIP 文件唯一的區別就是在 JAR 文件的內容中,包含了一個 META-INF/MANIFEST.MF 文件,這個文件是在生成 JAR 文件的時候自動創建的

          jar 命令詳解

          jar 是隨 JDK 安裝的,在 JDK 安裝目錄下的 bin 目錄中,Windows 下文件名為 jar.exe,Linux 下文件名為 jar。它的運行需要用到 JDK 安裝目錄下 lib 目錄中的 tools.jar 文件。不過我們除了安裝 JDK 什么也不需要做,因為 SUN 已經幫我們做好了。我們甚至不需要將 tools.jar 放到 CLASSPATH 中。

          使用不帶任何的 jar 命令我們可以看到 jar 命令的用法如下:

          jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...

          其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一個,它們分別表示:

          -c 創建新的 JAR 文件包

          -t 列出 JAR 文件包的內容列表

          -x 展開 JAR 文件包的指定文件或者所有文件

          -u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)

          [vfm0M] 中的選項可以任選,也可以不選,它們是 jar 命令的選項參數

          -v 生成詳細報告并打印到標準輸出

          -f 指定 JAR 文件名,通常這個參數是必須的

          -m 指定需要包含的 MANIFEST 清單文件

          -0 只存儲,不壓縮,這樣產生的 JAR 文件包會比不用該參數產生的體積大,但速度更快

          -M 不產生所有項的清單(MANIFEST〕文件,此參數會忽略 -m 參數

          [jar-文件] 即需要生成、查看、更新或者解開的 JAR 文件包,它是 -f 參數的附屬參數

          [manifest-文件] 即 MANIFEST 清單文件,它是 -m 參數的附屬參數

          [-C 目錄] 表示轉到指定目錄下去執行這個 jar 命令的操作。它相當于先使用 cd 命令轉該目錄下再執行不帶 -C 參數的 jar 命令,它只能在創建和更新 JAR 文件包的時候可用?! ?br />
          文件名 ... 指定一個文件/目錄列表,這些文件/目錄就是要添加到 JAR 文件包中的文件/目錄。如果指定了目錄,那么 jar 命令打包的時候會自動把該目錄中的所有文件和子目錄打入包中。

          下面舉一些例子來說明 jar 命令的用法:

          1) jar cf test.jar test

          該命令沒有執行過程的顯示,執行結果是在當前目錄生成了 test.jar 文件。如果當前目錄已經存在 test.jar,那么該文件將被覆蓋。

          2) jar cvf test.jar test

          該命令與上例中的結果相同,但是由于 v 參數的作用,顯示出了打包過程,如下:

          標明清單(manifest)

          增加:test/(讀入= 0) (寫出= 0)(存儲了 0%)

          增加:test/Test.class(讀入= 7) (寫出= 6)(壓縮了 14%)

          3) jar cvfM test.jar test

          該命令與 2) 結果類似,但在生成的 test.jar 中沒有包含 META-INF/MANIFEST 文件,打包過程的信息也略有差別:

          增加:test/(讀入= 0) (寫出= 0)(存儲了 0%)

          增加:test/Test.class(讀入= 7) (寫出= 6)(壓縮了 14%)

          4) jar cvfm test.jar manifest.mf test

          運行結果與 2) 相似,顯示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 內容不同,是包含了 manifest.mf 的內容

          5) jar tf test.jar

          在 test.jar 已經存在的情況下,可以查看 test.jar 中的內容,如對于 2) 和 3) 生成的 test.jar 分別應該此命令,結果如下;

          對于 2)

          META-INF/

          META-INF/MANIFEST.MF

          test/

          test/Test.class

          對于 3)

          test/

          test/Test.class

          6) jar tvf test.jar

          除顯示 5) 中顯示的內容外,還包括包內文件的詳細信息,如:

          0 Wed Jun 19 15:39:06 GMT 2002 META-INF/

          86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF

          0 Wed Jun 19 15:33:04 GMT 2002 test/

          7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class

          7) jar xf test.jar

          解開 test.jar 到當前目錄,不顯示任何信息,對于 2) 生成的 test.jar,解開后的目錄結構如下:

            ==

            |-- META-INF

            |  `-- MANIFEST

            `-- test

              `--Test.class

          8) jar xvf test.jar

          運行結果與 7) 相同,對于解壓過程有詳細信息顯示,如:

          創建:META-INF/

          展開:META-INF/MANIFEST.MF

          創建:test/

          展開:test/Test.class

          9) jar uf test.jar manifest.mf

          在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 來查看 test.jar 可以發現 test.jar 中比原來多了一個 manifest。這里順便提一下,如果使用 -m 參數并指定 manifest.mf 文件,那么 manifest.mf 是作為清單文件 MANIFEST 來使用的,它的內容會被添加到 MANIFEST 中;但是,如果作為一般文件添加到 JAR 文件包中,它跟一般文件無異。

          10) jar uvf test.jar manifest.mf

          與 9) 結果相同,同時有詳細信息顯示,如:

          增加:manifest.mf(讀入= 17) (寫出= 19)(壓縮了 -11%)

          關于 JAR 文件包的一些技巧

          1) 使用 unzip 來解壓 JAR 文件

          在介紹 JAR 文件的時候就已經說過了,JAR 文件實際上就是 ZIP 文件,所以可以使用常見的一些解壓 ZIP 文件的工具來解壓 JAR 文件,如 Windows 下的 WinZip、WinRAR 等和 Linux 下的 unzip 等。使用 WinZip 和 WinRAR 等來解壓是因為它們解壓比較直觀,方便。而使用 unzip,則是因為它解壓時可以使用 -d 參數指定目標目錄。

          在解壓一個 JAR 文件的時候是不能使用 jar 的 -C 參數來指定解壓的目標的,因為 -C 參數只在創建或者更新包的時候可用。那么需要將文件解壓到某個指定目錄下的時候就需要先將這具 JAR 文件拷貝到目標目錄下,再進行解壓,比較麻煩。如果使用 unzip,就不需要這么麻煩了,只需要指定一個 -d 參數即可。如:

          unzip test.jar -d dest/

          2) 使用 WinZip 或者 WinRAR 等工具創建 JAR 文件

          上面提到 JAR 文件就是包含了 META-INF/MANIFEST 的 ZIP 文件,所以,只需要使用 WinZip、WinRAR 等工具創建所需要 ZIP 壓縮包,再往這個 ZIP 壓縮包中添加一個包含 MANIFEST 文件的 META-INF 目錄即可。對于使用 jar 命令的 -m 參數指定清單文件的情況,只需要將這個 MANIFEST 按需要修改即可。

          3) 使用 jar 命令創建 ZIP 文件

          有些 Linux 下提供了 unzip 命令,但沒有 zip 命令,所以需要可以對 ZIP 文件進行解壓,即不能創建 ZIP 文件。如要創建一個 ZIP 文件,使用帶 -M 參數的 jar 命令即可,因為 -M 參數表示制作 JAR 包的時候不添加 MANIFEST 清單,那么只需要在指定目標 JAR 文件的地方將 .jar 擴展名改為 .zip 擴展名,創建的就是一個不折不扣的 ZIP 文件了,如將上一節的第 3) 個例子略作改動:

          jar cvfM test.zip test
          posted on 2006-04-15 11:06 surffish 閱讀(1426) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 六枝特区| 乃东县| 阿拉善右旗| 安阳市| 资兴市| 顺义区| 望奎县| 长乐市| 桐乡市| 绥中县| 徐汇区| 罗城| 峨眉山市| 永安市| 囊谦县| 濮阳县| 灵丘县| 宜良县| 涞水县| 赤壁市| 开原市| 弥勒县| 灵丘县| 大田县| 旅游| 荥阳市| 奎屯市| 花垣县| 宣威市| 焉耆| 枝江市| 广平县| 杭锦后旗| 鲁山县| 蓬安县| 巴塘县| 永仁县| 赤壁市| 铜山县| 卓尼县| 六枝特区|