views:

227

answers:

4

How do I know what file reference to use to get a file from my WAR.

The structure of the WAR is:

WAR
src
- model
- web
build
  WebContent
    META-INF
    WEB-INF
      LIB

The JSPs are under WebContent, I have put the config.txt file under the WebContent folder and tried to get to it with

BufferedReader in = new BufferedReader(new FileReader("WebContent/config.txt"));

But this doesn't work. Does anyone know what reference I need to pass or how I can figure it out.

+6  A: 

Check out ServletContext.getResourceAsStream(). Here is an example.

Asaph
That's the one :-) +1
ChssPly76
Thanks for the example.
Ankur
+1  A: 

One way to do this comes with a caveat that I'll explain below. You should do something like this:

// In a Servlet
ServletContext sc = getServletContext();
BufferedReader in = 
    new BufferedReader(new FileReader(sc.getRealPath("WebContent/config.txt"));

This assumes that your servlet container is configured to expand war files into their corresponding directory structure.

Andy Gherna
Yes I am using Tomcat and it does the expansion
Ankur
But for some reason it didn't work
Ankur
Look at ChssPly76's comment to Asaph's answer. He's right.
Andy Gherna
@Ankur: My answer is back. I temporarily deleted it to fix a problem identified by @ChssPly76.
Asaph
Cool thanks. I see it.
Ankur
+2  A: 

I think just remove WebContent from the path while reading the file and it should help.

Kalpak
A: 

The safest way to access this file should be something like this:

InputStream input = getClass().getClassLoader().getResourceAsStream("your/path/enter/here");

Kico Lobo