从Web应用程序遍历已部署的文件夹

时间:2011-04-25 09:07:56

标签: java file jsf java-ee

Web应用程序是否可以访问其自己的已部署文件夹。我正在使用JSF 1.2框架,我需要访问部署目录中的一些文件。

JSF是否有任何内置方法可以为我们提供已部署的文件夹及其中的文件?

3 个答案:

答案 0 :(得分:2)

使用ExternalContext.getResourcePaths("/")。在servlet容器中,这将委托给ServletContext.getResoucePaths(String)。正如文档所述:

  

例如,对于Web应用程序   含有:

     
/welcome.html
/catalog/index.html
/catalog/products.html
/catalog/offers/books.html
/catalog/offers/music.html
/customer/login.jsp
/WEB-INF/web.xml
/WEB-INF/classes/com.acme.OrderServlet.class
/WEB-INF/lib/catalog.jar!/META-INF/resources/catalog/moreOffers/books.html
     

getResourcePaths("/")会回来   {"/welcome.html", "/catalog/", "/customer/", "/WEB-INF/"},和   getResourcePaths("/catalog/")会   返回{"/catalog/index.html", "/catalog/products.html", "/catalog/offers/", "/catalog/moreOffers/"}

对于可移植代码,假设您可以通过文件系统访问资源:

  

此方法(getResource(String))允许servlet容器从任何源为servlet提供资源。资源可以位于本地或远程文件系统,数据库或.war文件中。

答案 1 :(得分:1)

您可以访问类路径中的资源,但servlet API不保证其物理表示。换句话说,如果部署WAR文件,容器可能会爆炸WAR文件或保持原样,或根据需要做一些完全不同的事情。

在这个特定的上下文中,它意味着您通过假设将Web应用程序部署到文件夹来引入一个微妙的容器依赖关系,您应该非常小心。

但是,如果你只需要获得类路径中的一些项目,那么你应该看一下这个问题:Getting the inputstream from a classpath resource (XML file)

答案 2 :(得分:0)

FacesContext.getCurrentInstance().getExternalContext().getResource("/").toString();

您将使用WEB-INF/classes课程中的parent();方法获取File dir遍历的路径以获取位置