How to access a file under WEB-INF folder in java class
ServletContext.getResourceAsStream() will load a file from a given path relative to the root of the WAR file. Something like:
ServletContext ctx;
InputStream configStream = ctx.getResourceAsStream("/WEB-INF/config.properties");
The major issue here is that you need access to the servlet context to be able to do this. You have that in a servlet or a filter, but not in a non-web component further back in the application. You have a few options:
- Make the servlet context available from the web layer to the service layer, via an application-scoped variable, or injection, or some other way
- Put the resource-loading code in the web layer, and expose that to the service layer
- Load the configuration in the web layer, and pass it on to the service layer
You can get the absolute path of servlet using getRealPath()
method of ServletContext
and then append WEB-INF
to the path you get. I think this is very basic there may be some other answers as well.
hey you all care for context related file loading like application context , web.xml ,config and property file
Here is how to load a java file any kind of file under WEB-INF
but it stored on another stucture like a sub folder reportFile
the your file or sub folder again report01
--
fullpath is = /WEB-INF/reportFile/report01/report.xml
,i have tried many possibilities to load and read this xml file ...none of the above worked for me but , here is the trick for future use...
In Action or inservice class you know interface implementation class
no imports
that is good part also.
declare your file object
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 the path by removing classes
from the above and add your specific path
File f = new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml")
Then
you can even parse it using xml parser or do anything
document = docBuilder.parse(new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml"));
Cheers!!
"new FIleInputStream( Utility.class.getClassLoader().getResource(keyFileName).getPath() )" worked for me.
Here "Utility" is my class name where the code is calling this line , "keyFileName" is the file i need to open