Java(maven web app),获取资源文件夹中文件的完整文件路径?

时间:2011-08-25 01:32:22

标签: java spring maven struts classpath

我正在使用标准Maven目录结构设置的项目,因此我有一个名为“resources”的文件夹,在此我创建了一个名为“fonts”的文件夹,然后在其中放入一个文件。我需要从第三方库中将完整的String文件路径(位于我的项目结构中的文件位于resources/fonts/somefont.ttf)传递给我正在使用的对象,如下所示,我已经搜索了一段时间,但是对于正确的方法这一点感到有点困惑。我尝试过如下,但无法找到它。我查看了使用ResourceBundle,但这似乎涉及制作一个实际的File对象,当我只需要传递给下面的方法的路径时(没有在前面的实际方法调用)我只是从我的记忆中给出一个例子):

FontFactory.somemethod("resources/fonts/somefont.ttf");

我原以为有一种方法,使用标准Maven目录结构的项目从资源文件夹中获取文件,而不必使用类/包中的完整相对路径。对此有任何建议都非常感谢。

我不想使用硬编码路径,因为在项目上工作的不同开发人员有不同的设置,我想将其作为项目的一部分包含在内,以便他们在签出项目源时直接获得它。

这适用于Web应用程序(Struts 1.3应用程序),当我查看爆炸的WAR文件(我通过Tomcat运行项目)时,文件位于:

<Exploded war dir>/resources/fonts/somefont.ttf

5 个答案:

答案 0 :(得分:11)

代码:

import java.io.File;
import org.springframework.core.io.*;

public String getFontFilePath(String classpathRelativePath) {
    Resource rsrc = new ClassPathResource(classpathRelativePath);
    return rsrc.getFile().getAbsolutePath();
}

在你的情况下,classpathRelativePath就像“/resources/fonts/somefont.ttf”。

答案 1 :(得分:3)

您可以使用下面提到的来获取文件的路径:

String fileName = "/filename.extension"; //use forward slash to recognize your file
String path = this.getClass().getResource(fileName).toString();

使用/将路径传递给您的方法。

答案 2 :(得分:1)

如果您的资源目录位于战争的根目录中,那意味着resources / fonts / somefont.ttf将成为该文件可用的“虚拟路径”。您可以从ServletContext get the "real path" - 绝对文件系统路径。注意(在文档中)这仅在WAR爆炸时才有效。如果您的容器从war文件运行应用程序而不扩展它,则此方法将不起作用。

答案 3 :(得分:1)

URL resource = getServletContext().getResource("/WEB-INF/classes/fonts/somefont.ttf");
String relativePath = resource.getPath();

答案 4 :(得分:0)

你可以在我所拥有的类似路线上查找问题的答案 Loading XML Files during Maven Test run

BobG给出的答案应该有效。虽然您需要记住资源文件的路径是相对于当前类的路径。资源和java源文件都在类路径