2012-10-14 62 views
14

我在web應用程序中有一個純java類,並且想要讀取WEB-INF文件夾下的配置文件。我知道在類路徑中訪問文件的方式(WEB-INF/classes文件夾)。由於WEB-INF/classes文件夾是用於.class文件,我只想將我的配置文件保留在WEB-INF文件夾下。如何訪問java類中WEB-INF文件夾下的文件

任何人都可以告訴我如何從我的java類訪問它嗎?

+1

如果配置文件是Java類的文件,爲什麼把它放在'WEB -INF'文件夾...爲什麼不在'src/main/resources'文件夾中並從那裏訪問它? –

+0

我會說'getResourceAsStream'應該可以工作 – SJuan76

+1

配置應該在src/main/resources中,並且在部署web應用程序時將被構建到class文件夾中。爲什麼需要將配置文件放入WEB-INF文件夾? – Thinhbk

回答

2

您可以使用getRealPath()方法ServletContext獲得servlet的絕對路徑,然後將WEB-INF附加到您獲得的路徑。我認爲這是非常基本的,也可能有其他一些答案。

+1

我知道如何在'ServletContext'的幫助下做到這一點。但是我正在尋找的是在普通的java類中這樣做。 – Newbie

14

ServletContext.getResourceAsStream()將從相對於WAR文件根目錄的給定路徑加載文件。例如:

ServletContext ctx; 
InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties"); 

這裏的主要問題是您需要訪問servlet上下文才能執行此操作。你可以在一個servlet或一個過濾器中使用它,但不能在應用程序後面的非Web組件中使用。您有幾種選擇:

  • 使可從網絡層到服務層的servlet上下文,通過應用範圍的變量,或注射,或一些其他的方式
  • 把資源加載代碼網絡層,並露出其到服務層
  • 加載在網層的結構中,並把它傳遞給服務層
+0

沒有直接的方式在非普通的Java類這樣的web組件中做到這一點? – Newbie

+1

不是我所知道的。一個普通的Java類不知道它是Web應用程序的一部分,所以它不可能訪問任何API來執行特定於Web應用程序的事情! –

0

hey you all care for context related file loading like application context , web.xml ,config and property file

下面是如何加載一個java文件中的任何類型的文件WEB-INF下,但它存儲在另一stucture像一個子文件夾reportFile的文件或子文件再次report01 -

fullpath is = /WEB-INF/reportFile/report01/report.xml,我已經嘗試了許多可能性和加載閱讀這個XML文件...以上都沒有爲我工作,但是,這裏是將來使用的技巧...

In Action or inservice class you know interface implementation class沒有imports這也是很好的一部分。

通過從上述classes聲明文件對象

File myClass = new File(getClass().getProtectionDomain().getCodeSource().getLocation().getFile()); 
System.out.println("Finding calss path first then remove classes from the path " + myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFIle/report01/reports.xml") 

2.Load的路徑,並添加您的具體路徑

File f = new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml") 

然後

,你甚至可以用XML解析它解析器或做任何事情

document = docBuilder.parse(new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml")); 

乾杯!

1

「新的FileInputStream( Utility.class.getClassLoader()的getResource(的KeyFileName).getPath() )」 爲我工作。

這裏的「實用工具」是我的類名,其中的代碼調用此行,「的KeyFileName」是我需要打開

相關問題