夢幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評論 :: 0 Trackbacks

          獲得運行jar包存放路徑的方法

          在 java 中, System.getProperty("user.dir") 得到的是當(dāng)前工作路徑(對應(yīng)命令行命令就是 linux 下的 pwd 、 windows 下的 cd ),而 System.getProperty("user.home") 得到的是當(dāng)前用戶主目錄(對應(yīng)于 linux 下的 ~ 目錄、 windows 下的 document and settings\username );但如果你想得到所運行的 java 程序所在的路徑,似乎并沒有什么簡單的方法。

            比如說,有一個 pathTest.jar 包放在 D:\zeal\webdev 下,這個 jar 執(zhí)行的時候需要在當(dāng)前目錄下讀寫一個 test.log 文件。如果不采用絕對路徑來讀寫 test.log 的話,不同的 jar 運行方式會帶來不同的結(jié)果:

          cd D:\zeal\webdev
          java -jar pathTest.jar

                     ( test.log 將生成在 D:\zeal\webdev 目錄下 )

          cd E:\sun\jre\bin
          java -jar D:\zeal\webdev\pathTest.jar

                     ( test.lgo 將生成在 E:\sun\jre\bin 目錄下 )

            這勢必造成潛在的運行錯誤。解決的方法是必須在程序中指定 test.log 文件的絕對路徑。從本意上來講,這里我們希望 test.log 與 pathTest.jar 位于相同的路徑之下。但顯然無論是 "user.dir" 還是 "user.home" 都不會返回正確的結(jié)果。

            幸好, java 允許我們定位某個 class 的 CodeSource , 通過 CodeSource 提供的 Location 信息就能夠找到相關(guān)的文件路徑。假設(shè) pathTest.jar 的 main class 是 pathTest ,通過

          new pathTest().getClass().getProtectionDomain().getCodeSource().getLocation();

            就可以得到 pathTest.jar 的完整路徑( file:/D:/zeal/webdev/pathTest.jar ),接下來怎么做就簡單了。當(dāng)然,實際應(yīng)用中一般我們會選擇把所有與jar相關(guān)的資源文件一起打包進去,或者使用 "user.home" 這樣的固定位置來存放;除非在特殊情況下才會需要通過這個迂回的方式來獲取相關(guān)的路徑信息。

          posted on 2010-12-22 21:52 HUIKK 閱讀(9944) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 张家港市| 阜康市| 乡城县| 新密市| 贵州省| 宜宾县| 普定县| 遂宁市| 安龙县| 花莲县| 万山特区| 汶川县| 龙江县| 福海县| 旺苍县| 巴林左旗| 西宁市| 同江市| 英超| 扶绥县| 浑源县| 琼海市| 高阳县| 如东县| 绵阳市| 天峻县| 婺源县| 娄底市| 杂多县| 东乡族自治县| 峨眉山市| 墨脱县| 平安县| 灵寿县| 三都| 白沙| 晋宁县| 沈丘县| 如皋市| 吴江市| 库尔勒市|