如何在WebContent文件夹中获取文件的真实路径?

时间:2010-05-07 05:36:41

标签: java spring realpath webcontent

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

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

9 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:12)

getServletContext()。getRealPath(“”) - 如果从.war存档中提供内容,则这种方式不起作用。 getServletContext()将为null。

在这种情况下,我们可以使用另一种方式来获得真正的路径。这是获取属性文件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");

答案 2 :(得分:1)

你必须告诉java改变你的电脑到java项目的路径 如果你使用弹簧:

@Autowired
ServletContext c;

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

但如果您使用servlet,请使用

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

所以路径为/webapp/images/:)

答案 3 :(得分:0)

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

这样我就不必担心只包含在jar中的内容或位于某处的内容,具体取决于我目前正在使用的Web容器。

答案 4 :(得分:0)

将请求作为参数包含在内。然后Spring在调用映射方法

时传递请求对象
@RequestMapping .....
public String myMethod(HttpServletRequest request) {
   String realPath = request.getRealPath("/somefile.txt");
   ...

答案 5 :(得分:0)

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

答案 6 :(得分: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;
}

答案 7 :(得分:0)

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

String dir = request.getSession().getServletContext().getRealPath("/")+"/../mydir";
            Files.createDirectories(Paths.get(dir));

答案 8 :(得分:-1)

如果您想在开发和生产级别使用arff.txt,请尝试使用此方法

  String path=getServletContext().getRealPath("/WEB-INF/files/arff.txt");