如何从src中的Java类内部引用WebContent中的文件



我有一个JSF应用程序,文件结构如下:

ReportGeneratorJSF
 |-- src
 |    `-- Abc.java
 |-- WebContent
 |    `-- FormattedExcel
 |         `-- abc.xls
 :

在我的Abc类中,我需要将Excel文件称为

File file = new File("location of abc.xls");

然而,无论我尝试什么路径,它都是null。我如何找到正确的路径?

java.io.File直接在本地磁盘文件系统上工作,完全不知道它所运行的Java (EE)应用程序上下文。因此,它绝对不知道应用程序"根"位于C:/some/path/to/ReportGeneratorJSF。它会假设每个相对路径都相对于"当前工作目录",即Java虚拟机启动时当前打开的目录。

你不应该依赖java.io.File中的相对路径被正确处理。时期。

假设您已经将其保存为项目的webcontent文件夹中的JSF webapp资源,那么您应该使用ExternalContext#getResourceAsStream()来从中获得InputStream(最终,您想要从File中创建FileInputStream,对吗?否则File怎么有用?)。它采用一个相对于webcontent根目录的路径,而不是磁盘文件系统的当前工作目录。

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
InputStream input = ec.getResourceAsStream("/FormattedExcel/abc.xls");
// ...

参见:

  • getresourcestream () vs FileInputStream

相关内容

  • 没有找到相关文章

最新更新