2010-06-04 91 views
5

中讀取我的「src/main/recources」文件夾中有不同的XML文件,我想從我的web應用程序讀取它們。在資源文件夾(WAR)中存儲xml文件,從代碼

File f = new File("file1.xml"); 
f.getAbsolutePath(); 

代碼在WebService內部被調用,當我查看Tomcat服務器輸出時,打印出'C:\ Users \ Administrator'。我目前的解決方案是將'file1.xml'文件放在WAR之外的'C:\'文件夾中,但這樣我的WAR不可轉讓。

我也試過

<bean name="webService"> 
     <property name="document"> 
     <value>classpath:file1.xml</value> 
     </property> 
    </bean> 

但這只是打印出來的「類路徑:file.xml」,而不分析它。

問候, 皮特

回答

5

如果您使用的是標準maven2 war包裝,您的file1.xml將被複制到warfile中的WEB-INF/classes目錄中。

您可以通過類路徑訪問此文件。

URL resourceUrl = URL.class.getResource("/WEB-INF/classes/file1.xml"); 
File resourceFile = new File(resourceUrl.toURI()); 
+2

啊,它的工作原理,我不得不修改第一行: URL resourceUrl = Thread.currentThread()。getContextClassLoader()。getResource(「file1.xml」); 當然,File1.xml必須位於資源文件夾中。 非常感謝! – JavaPete 2010-06-04 12:04:29

+0

但你爲什麼需要通過currentThread()。getContextClassLoader()?您的環境中是否存在某種安全限制或者我錯過了什麼? 您是使用標準maven war插件或通過程序集或其他方式構建web應用程序嗎? – 2010-06-04 23:30:50

0

如果您將文件放在一個目錄WEB-INF下(或在WEB-INF本身),那麼你可以通過閱讀它的ServletContextgetResourceAsStream方法:

try { 
    InputStream is = context.getResourceAsStream("/WEB-INF/file1.xml"); 
    ... 
} catch (IOException e) { 
    ... 
} 
+0

我沒有ServletContext對象,因爲此代碼駐留在webservice方法(Spring-WS)中。或者我錯過了這一點? – JavaPete 2010-06-04 11:04:00

0

您可以將路徑信息放入路徑/ WEB-INF/classes中的屬性文件中 - 並在運行時將該信息加載到應用程序中。

要爲此路徑屬性設置不同的值,您可以使用maven配置文件選項或任何其他構建工具 - 以便不同的環境導致WAR文件具有適合該環境的路徑的正確屬性值。

+0

是的,但我想避免這樣做,因爲文件的相對路徑不需要我具有不同的配置文件。但是如果我不能得到任何其他工作,我會使用這個解決方案,謝謝! – JavaPete 2010-06-04 11:06:01