posts - 1,  comments - 25,  trackbacks - 0

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

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

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

          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" 都不會返回正確的結果。

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

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

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

          posted on 2009-12-25 10:09 Daniel 閱讀(1893) 評論(2)  編輯  收藏 所屬分類: CoreJava

          FeedBack:
          # re: 獲得當前運行jar包存放路徑的方法
          2011-10-13 13:37 | mlzry
          For JDK 1.6

          new File(ClassLoader.getSystemClassLoader().getResource(".").getPath()).getAbsolutePath()  回復  更多評論
            
          # re: 獲得當前運行jar包存放路徑的方法
          2013-05-27 19:29 | mu
          RunnableJar 下new pathTest().getClass().getProtectionDomain().getCodeSource().getLocation();這種方法就不管用了。  回復  更多評論
            
          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 濮阳市| 崇阳县| 固安县| 莱州市| 寿光市| 连山| 东宁县| 澄迈县| 西乡县| 财经| 尉犁县| 冀州市| 磐石市| 宿迁市| 介休市| 呼和浩特市| 夏邑县| 化州市| 衡阳市| 商河县| 龙泉市| 宣武区| 南川市| 平度市| 乳源| 大渡口区| 靖安县| 博湖县| 广丰县| 东城区| 兴山县| 平山县| 桂东县| 安国市| 铁力市| 贵州省| 和田市| 遵化市| 鸡东县| 通化市| 奈曼旗|