How to access a file under WEB-INF folder in java class

后端 未结 4 804
终归单人心
终归单人心 2020-12-01 16:35

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 class

相关标签:
4条回答
  • 2020-12-01 16:42

    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!!

    0 讨论(0)
  • 2020-12-01 16:46

    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
    0 讨论(0)
  • 2020-12-01 16:48

    "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

    0 讨论(0)
  • 2020-12-01 17:03

    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.

    0 讨论(0)
提交回复
热议问题