1

我有一个具有以下文件结构的 JSF 应用程序:

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

在我的Abc课堂上,我需要将 Excel 文件称为

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

但是,无论我尝试什么路径,它都是null. 我如何找出正确的路径?

4

1 回答 1

3

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

您永远不应该依赖相对路径java.io.File来得到正确对待。时期。

鉴于您已将其作为 JSF webapp 资源保存在项目的 webcontent 文件夹中,您应该改为使用它ExternalContext#getResourceAsStream()来获取InputStream它(最终,您想创建一个FileInputStreamout of ,对File吧?不然怎么办?File有用?)。它采用相对于 webcontent 根目录的路径,而不是磁盘文件系统的当前工作目录。

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

也可以看看:

于 2013-04-12T12:41:56.417 回答