我有一个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