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

时间:2013-04-12 12:36:59

标签: jsf

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

鉴于您已将其保存为项目的webcontent文件夹中的JSF webapp资源,您应该使用ExternalContext#getResourceAsStream()来获取InputStream(最终,您希望从FileInputStream中创建一个File,对吧?File还有用吗?)。它需要一个相对于webcontent根的路径,而不是磁盘文件系统的当前工作目录。

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

另见: