2013-05-06 190 views
0

我有一個小問題,試圖找出我的路徑問題的最佳解決方案。我正在運行一個java測試,我想獲得兩件事情。Java獲取當前路徑

  1. 運行

我想正確的項目

  • 絕對位置當前類文件的絕對位置/或\正對OS版本,以便文件夾結構保持不變。我目前正在使用這個,但它不完全是我正在尋找

    final String parentDir = System.getProperty("user.dir"); 
    final String path = "src/test/java/" + method.getDeclaringClass() 
        .getCanonicalName().replaceAll("\\.", "/") + ".java"; 
    

    任何幫助,將不勝感激。謝謝

    更新:我想獲取預編譯代碼的URL,因爲我需要訪問代碼中的註釋。這可能會改變你的一些人的答案

    更新2:好的我得到它的工作。

    final String path = new File(getClass().getResource("/").getFile()) 
          .getParent().split("target")[0] + "src/test/java/" + method 
          .getDeclaringClass().getCanonicalName() 
          .replaceAll("\\.", "/") + ".java"; 
    

    謝謝你們

  • +2

    你可以得到本地分隔符看看這個鏈接。 http://stackoverflow.com/questions/8075373/file-separator-vs-filesystem-getseparator-vs-system-getpropertiesfile-separa – Elmer 2013-05-06 19:26:39

    +0

    當前代碼的改進不大:使用replace('。','/')'而不是'replaceAll(「\\。」,「/」)'來避免正則表達式引擎。 – Pshemo 2013-05-06 19:30:30

    +0

    獲取項目的絕對位置嘗試打印到控制檯以下:System.out.println(new File(「。」)。getAbsolutePath()); – Mike 2013-05-06 19:40:43

    回答

    0

    如果說你是從jar文件運行:

    new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParent()+"/" 
    

    返回包含的jar文件的文件夾。

    刪除上述.getParent()得到的確切class文件

    +0

    嘗試了你的命令,我得到了以下/ Users/john/work/development/automation/product/store/target/ – jrock2004 2013-05-06 21:39:07

    +0

    是不是包含ur類的路徑?也爲項目文件夾'新文件(「。」);'會做。 – Jatin 2013-05-07 05:41:24

    1

    既然你是從MyClass的調用這個路徑,你應該叫 File directory = (new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath())).getParentFile();

    我有同樣的問題一次。除了Jatin的回答之外,我必須添加toURI()以在所有平臺(Windows等)上獲得正確的路徑併發布1.5個JVM。

    +0

    試過你的命令,我得到以下 /用戶/約翰/工作/發展/自動化/產品/商店/目標 – jrock2004 2013-05-06 21:37:14

    +0

    在OS X.嘗試Windows以確保... – 2013-05-06 21:52:35

    +0

    基督徒,可以說它的工作原理,不會真的解決了我的問題。當我明天上班時,我會嘗試在Windows機器上 – jrock2004 2013-05-06 22:06:42