Reputation: 3009
I have a plain java class in a web application and want to read a configuration file under WEB-INF
folder. I know the way to access the file if its in the classpath (WEB-INF/classes
folder). Since WEB-INF/classes
folder is meant for .class
files, I want to keep my configuration file under WEB-INF
folder only.
Can anyone tell me how I can access it from my java class?
Upvotes: 20
Views: 54163
Reputation: 1046
"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
Upvotes: 2
Reputation: 7723
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.
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")
classes
from the above and add your specific pathFile f = new File(myClass.getCanonicalPath().replaceFirst("classes", "")+"reportFile/report01/reports.xml")
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!!
Upvotes: 1
Reputation: 47243
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:
Upvotes: 22
Reputation: 15664
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.
Upvotes: 2