11

我需要在我的 WebContent 目录中获取文件的真实路径,以便我使用的框架可以访问该文件。它只需要字符串文件作为属性,所以我需要在 WebContent 目录中获取该文件的真实路径。

我使用 Spring Framework,所以应该可以在 Spring 中进行解决方案。

4

9 回答 9

13

如果您在 servlet 中需要它,请使用getServletContext().getRealPath("/filepathInContext")!

于 2010-05-07T05:48:54.937 回答
13

getServletContext().getRealPath("") - 如果内容从 .war 存档中可用,这种方式将不起作用。getServletContext() 将为空。

在这种情况下,我们可以使用另一种方式来获取真实路径。这是获取属性文件 C:/Program Files/Tomcat 6/webapps/myapp/WEB-INF/classes/somefile.properties 的路径的示例:

// URL returned "/C:/Program%20Files/Tomcat%206.0/webapps/myapp/WEB-INF/classes/"
URL r = this.getClass().getResource("/");

// path decoded "/C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/"
String decoded = URLDecoder.decode(r.getFile(), "UTF-8");

if (decoded.startsWith("/")) {
    // path "C:/Program Files/Tomcat 6.0/webapps/myapp/WEB-INF/classes/"
    decoded = decoded.replaceFirst("/", "");
}
File f = new File(decoded, "somefile.properties");
于 2012-11-06T04:51:08.257 回答
2

您必须告诉 java 将路径从您的 pc 更改为您的 java 项目,因此如果您使用 spring 使用:

@Autowired
ServletContext c;

String UPLOAD_FOLDEdR=c.getRealPath("/images"); 

但如果您使用 servlet,只需使用

String UPLOAD_FOLDEdR = ServletContext.getRealPath("/images");  

所以路径将是/webapp/images/:)

于 2018-01-27T17:52:13.777 回答
0

您可以使用 Spring Resource 接口(尤其是 ServletContextResource):http ://static.springsource.org/spring/docs/current/javadoc-api/org/springframework/core/io/Resource.html

于 2010-05-07T07:30:06.660 回答
0

在这种情况下,我倾向于将我需要的内容提取为资源 (MyClass.getClass().getResourceAsStream()),将其作为文件写入临时位置,并将该文件用于其他调用。

这样我就不必为仅包含在 jar 中或位于某处的内容而烦恼,具体取决于我当前使用的 Web 容器。

于 2010-05-07T05:40:19.197 回答
0

将请求作为参数包含在内。然后 Spring 在调用映射方法时会传递请求对象

@RequestMapping .....
public String myMethod(HttpServletRequest request) {
   String realPath = request.getRealPath("/somefile.txt");
   ...
于 2010-05-07T06:11:53.000 回答
0

这种方法使用资源加载器获取应用程序中文件的绝对路径,然后将几个文件夹向上移动到应用程序的根文件夹。不需要 servlet 上下文!如果您的 WEB-INF 文件夹中有“web.xml”,这应该可以工作。请注意,您可能需要考虑仅将其用于开发,因为这种类型的配置通常最好存储在应用程序的外部。

public String getAppPath()
{
    java.net.URL r = this.getClass().getClassLoader().getResource("web.xml");
    String filePath = r.getFile();
    String result = new File(new File(new File(filePath).getParent()).getParent()).getParent();

    if (! filePath.contains("WEB-INF"))
    {
        // Assume we need to add the "WebContent" folder if using Jetty.
        result = FilenameUtils.concat(result, "WebContent");
    }

    return result;
}
于 2012-04-16T12:54:19.497 回答
0

我的解决方案: ..../webapps/mydir/ (../webapps/ROOT/../mydir/)

String dir = request.getSession().getServletContext().getRealPath("/")+"/../mydir";
            Files.createDirectories(Paths.get(dir));
于 2020-11-27T12:24:51.770 回答
-1

当您也想在开发和生产级别使用 arff.txt 时,请尝试使用它

  String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");
于 2017-12-29T08:17:48.450 回答