Web项目中的Java文件路径

San*_*Lee 3 java file

我需要从类中访问我的Web项目中的资源文件.问题是开发时的路径与部署路径不同.

例如,如果我想在开发时访问某些css文件,我可以这样做:

File file = new File("src/main/webapp/resources/styles/some.css/");
Run Code Online (Sandbox Code Playgroud)

但是一旦部署它可能不起作用,因为目标文件夹中没有srcmain目录.那么如何一致地访问文件呢?

Bal*_*usC 5

您似乎将CSS文件存储在类路径中,原因有些不明显.文件夹名称src通常是Eclipse项目源文件夹的默认名称.并且它显然神奇地在File构造函数中作为相对路径工作(坏,坏),只确认您在IDE上下文中运行它.

这确实不便携.

你不应该使用File的构造函数.如果资源位于类路径中,则需要将其作为类路径中的资源获取.

InputStream input = getClass().getResourceAsStream("/main/webapp/resources/styles/some.css");
// ...
Run Code Online (Sandbox Code Playgroud)

假设当前类在相同的上下文中运行,无论运行时环境如何,这都将起作用.

也可以看看:


更新:啊,功能要求现在更清楚了.

其实我想从文件中获取lastModified.是否可以使用InputStream? -

使用getResource()而不是获取它作为URL.然后你可以打开它上面的连接并请求lastModified.

URL url = getClass().getResource("/main/webapp/resources/styles/some.css");
long lastModified = url.openConnection().getLastModified();
// ...
Run Code Online (Sandbox Code Playgroud)

  • 使用当前线程上下文的类加载器。`URL url = Thread.currentThread().getContextClassLoader().getResource(path);`。 (2认同)

Ian*_*ird 5

如果您想要做的是打开应用程序浏览器可见部分内的文件,我建议使用ServletContext.getRealPath(...)

因此:

File f = new File(this.getServletContext().getRealPath("relative/path/to/your/file"));
Run Code Online (Sandbox Code Playgroud)

注意:如果您不在 servlet 内,您可能需要跳过一些额外的环节才能获得ServletContext. 此解决方案还允许您将 .css 文件放在用户浏览器可以看到的地方,而将其放在下面/WEB-INF/会向用户隐藏该文件。