Web项目中的Java文件路径

时间:2011-08-01 01:35:43

标签: java file

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

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

File file = new File("src/main/webapp/resources/styles/some.css/");

但是,部署后这可能无效,因为目标文件夹中没有srcmain目录。那么如何一致地访问文件呢?

5 个答案:

答案 0 :(得分:5)

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

这确实不便携。

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

InputStream input = getClass().getResourceAsStream("/main/webapp/resources/styles/some.css");
// ...

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

另见:


更新:啊,功能要求现在更加清晰。

  

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

请使用getResource()将其作为URL获取。然后,您可以打开它上面的连接并请求lastModified

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

答案 1 :(得分:3)

如果你要查看的是打开一个位于应用程序浏览器可见部分内的文件,我建议使用ServletContext.getRealPath(...)

因此:

File f = new File(this.getServletContext().getRealPath("relative/path/to/your/file"));

注意:如果你不在servlet中,你可能需要跳过一些额外的箍来获得ServletContext,但它应该始终在Web环境中可用。此解决方案还允许您将.css文件放在用户的浏览器可以看到的位置,而将其放在/WEB-INF/下则会隐藏来自用户的文件。

答案 2 :(得分:1)

将外部资源放在项目WEB-INF文件夹的子目录中。例如,将您的css资源放在WEB-INF/styles中,您应该能够以下列方式访问它们:

新文件(“styles / some.css”);

除非您没有使用标准WAR进行部署,否则您应该解释您的设置。

答案 3 :(得分:1)

通常,资源文件与您的类文件一起放在您的战争中。因此,他们将在类路径上,可以通过

查找
getClass.getResource("/resources/styles/some.css")

或打开文件为@ ig0774。

如果资源位于WAR中未部署的目录中(假设您需要在不重新部署的情况下进行更改),则可以使用VM arg定义资源的路径。

-Dresource.dir=/src/main/webapp/resources

并通过该变量进行查找以加载它。

答案 4 :(得分:0)

在Java Web项目中,标准目录如:

{WEB-ROOT} / 
           /WEB-INF/
           /WEB-INF/lib/
           /WEB-INF/classes

那么,如果你可以在文件系统动态中获取类文件路径, 你可以获得资源文件路径。

您可以通过以下方式获取路径(/ WEB-INF / classes /):

this.getClass().getProtectionDomain().getCodeSource().getLocation().getPath()

所以,然后是下一个...