How to find the working folder of a servlet based application in order to load resources

absolute-path, relative-path, resources, servlets, working-directory

Solution

You could use `ServletContext#getRealPath()` to convert a relative web content path to an absolute disk file system path.

String relativeWebPath = "/WEB-INF/static/file1.ext";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);
InputStream input = new FileInputStream(file);
// ...

However, if your sole intent is to get an `InputStream` out of it, better use `ServletContext#getResourceAsStream()` instead because `getRealPath()` may return `null` whenever the WAR is not expanded into local disk file system but instead into memory and/or a virtual disk:

String relativeWebPath = "/WEB-INF/static/file1.ext";
InputStream input = getServletContext().getResourceAsStream(relativeWebPath);
// ...

This is much more robust than the `java.io.File` approach. Moreover, using `getRealPath()` is considered bad practice.

See also:

- getResourceAsStream() vs FileInputStream

- What does servletcontext.getRealPath("/") mean and when should I use it

- Where to place and how to read configuration resource files in servlet based application?

- Recommended way to save uploaded files in a servlet application

Problem

I write a Java servlet that I want to install on many instances of Tomcat on different servers. The servlet uses some static files that are packed with the war file under WEB-INF. This is the directory structure in a typical installation: ``` - tomcat -- webapps --- myapp ---- index.html ---- WEB-INF ----- web.xml ----- classes ------ src ------- ..... ----- MY_STATIC_FOLDER ------ file1 ------ file2 ------ file3 ``` How can I know the absolute path of MY_STATIC_FOLDER, so that I can read the static files? I cannot rely on the "current folder" (what I get in a new File(".")) because it depends on where the Tomcat server was started from, which is different in every installation!

Original source

Related problems