2012-04-18 210 views
5

如何獲取我的計算機中服務器位置的絕對路徑?Java - 獲取服務器絕對路徑

假設我使用GlassFish服務器然後我需要得到如下GlassFish的文檔根目錄位置的絕對路徑:

C:\glassfish3\glassfish\domains\domain1\docroot 

在運行時,我需要使用Java IO包這樣的位置創建文件:

C:\glassfish3\glassfish\domains\domain1\docroot\myfile.txt 
+5

看['ServletContext'](http://docs.oracle.com/javaee/5/api/javax/servlet/ServletContext.html),用於像'getRealPath(路徑)'&'getContextPath方法()'。 – 2012-04-18 05:54:51

+0

request.getRealPath(「」)或request.getServletContext()。getRealPath(「」)爲我提供了C:\ Users \ Administrator \ Documents \ NetBeansProjects \ ServletExamples \ build \ web – 2012-04-18 06:02:07

+1

@ user966709可能是因爲從NetBeans已經配置了熱部署..但是如果你真的創建了一個.war文件並部署它,你可能會得到docroot的路徑 – 2013-05-03 12:18:05

回答

-1

對於你不必去完整路徑,因爲

當你創建文件比默認情況下它會在ROOT產生O-你服務器

這是C:\glassfish3\glassfish\在這裏。

希望這會幫助你。

+0

目前我正在使用硬編碼路徑C:\ glassfish3 \ glassfish \ domains \ domain1 \ docroot來編寫文件該位置,但需要動態獲取,因爲如果其他人將使用應用程序,則可能是他的玻璃魚服務器存在於d:\目錄中,並且在這種情況下,他需要手動更改路徑。 – 2012-04-18 05:58:02

+0

用java編寫代碼 File file = new File(「/ domains/domain1/docroot/myfile.txt」); 這將在C:\ glassfish3 \ glassfish \ domains \ domain1 \ docroot \ myfile.txt創建文件,即使您的glassfish在c:\或d:\也無所謂。 – 2012-04-18 06:02:29

0

我有一個類似的問題,結束了使用

path = getClass().getProtectionDomain().getCodeSource().getLocation() 

,因爲我需要一個靜態函數的路徑。這指向了WEB-INF/classes目錄。有了這個,你可以指向類似path.subString(0,path.indexOf("WEB-INF"))

我遇到了一個問題:從Eclipse運行測試時,它指向項目的「構建」目錄。

0

這是一個非常糟糕的主意。如果您運行的是WAR或EAR文件,則docroot不會位於可寫文件系統中。假設這種情況可能會在稍後導致頭痛。

使用其他方法(如servlet初始化參數)來指定可寫的文件系統位置。

3

如果使用的GlassFish啓動GlassFish的,即使用asadmin start-domain|start-instance然後我們提供以下的鐵一般的保證:

的JVM的當前工作目錄是絕對,積極保證是該域的config目錄或服務器。在默認的情況下,這將是:

c:/glassfish3/glassfish/domains/domain1/config 

如果你想要寫的東西(默認值)文檔根,你可以這樣做:

File f = new File("../docroot/yourfile"); 

這是保證始終另一種選擇即使您直接使用java啓動服務器(例如java -jar glassfish.jar),也是在每種情況下都可以使用系統屬性的值,如下所示:

File f = new File(System.getProperty("com.sun.aas.instanceRoot") + "/docroot/yourfile"); 
0

我不知道這是不是最好的方式,但它爲我工作:)

String path = new File("").getAbsolutePath() + File.separator + "docroot"; 
+1

這會獲取啓動應用程序服務器的位置的路徑,通常是startup.sh/startup.bat所在的位置。此腳本可能不一定位於服務器文件夾內。 – Hoffmann 2013-03-04 12:59:14

0

你可以嘗試以下操作:

System.getProperty("catalina.base"); 

,您可以通過下面看發現其他性質在調試模式下變量。

Properties properties = System.getProperties(); 
+0

特定於特定的Web服務器 – 2013-05-03 12:08:41

+0

,但正如我所看到的,問題的提問者使用glassfish。所以這對他/她來說是有用的。 – 2013-05-10 06:55:20

+0

我試圖做到這一點,但很遺憾,我沒有找到任何絕對路徑來揭示我的服務器的根。你知道如何確定它嗎? (我使用了第二個代碼並通過日誌打印出來)。 – 2013-12-05 14:46:56