Linux下定位當前目錄

情景:本人在Windows下寫了一個Java程序,該程序需要從當前目錄下的一個.xml文件中讀取參數。

問題在於現需把該程序打包成.jar包部署到Linux下,那麼如何在Linux下定位當前目錄呢?

 

參考網上的一些方法得知可以通過

String path = Class.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();

來解決

請看兩組實驗:

程序代碼如下:

package test;

public class T {
    public static String path;
    public static void main(String[] args) {
        path = new T().getPath();
        System.out.println(path);
    }
    public String getPath() {
        String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
        return path;
}

首先在windows下分別對.class和.jar文件進行測試(當前目錄爲G:/):

.class文件輸出爲:

/G:/

.jar文件輸出爲:

/G:/Test.jar

然後在Linux下分別對.class和.jar文件進行測試(當前目錄爲/usr/):

.class文件輸出爲:

/usr/

.jar文件輸出爲:

/usr/Test.jar

所以得出結論,對於.class文件或者在編譯器中我們只需要去除最前面的'/'即可。而對於.jar而言,我們需要去除最前面的'/'和後面的jar包名.jar兩部分纔行。且爲了保證在編譯器中能夠進行測試那麼我們可以這樣來寫:

package test;

public class T {
    public static String path;
    public static void main(String[] args) {
        path = new T().getPath();
    }
    public String getPath() {
        String path = this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
        System.out.println(path);
        if (System.getProperty("os.name").contains("dows")) {//判斷操作系統
            try {
                path = java.net.URLDecoder.decode(path, "UTF-8");//防止Windows下中文目錄亂碼
            } catch (Exception e) {
                e.printStackTrace();
            }
            path = path.substring(1, path.length());//去除前'/'
        }
        if (path.contains("jar")) {//去除jar包名.jar
            path = path.substring(0, path.lastIndexOf("."));
            return path.substring(0, path.lastIndexOf("/"));
        }
       return path;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章