Java 在JSF应用程序中加载文件

Java 在JSF应用程序中加载文件,java,file,loading,Java,File,Loading,我的逻辑需要加载一个嵌入到applications.war中的文件。 该文件位于应用程序的根目录下。它在我的机器上运行得很好 因为路径是硬编码的:File hmmFile=new File(“/home/kirill/projetos/biosarchfinition/pos-en-bio-medpost.HiddenMarkovModel”); 但是当我将它部署到服务器上时,它将无法工作,因为绝对路径是不同的 我尝试使用ClassLoader,但得到了一个空引用,并尝试使用FacesConte

我的逻辑需要加载一个嵌入到applications.war中的文件。 该文件位于应用程序的根目录下。它在我的机器上运行得很好 因为路径是硬编码的:File hmmFile=new File(“/home/kirill/projetos/biosarchfinition/pos-en-bio-medpost.HiddenMarkovModel”); 但是当我将它部署到服务器上时,它将无法工作,因为绝对路径是不同的

我尝试使用ClassLoader,但得到了一个空引用,并尝试使用FacesContext,但也没有成功。我使用的是glassfish 3和Mojarra 2.1.6

我的项目树如下所示:

在我的代码中,我引用的文件如下:

File hmmFile = new File("/home/kirill/projetos/biosearchrefinement/pos-en-bio-medpost.HiddenMarkovModel");
但这仅在本地运行应用程序时有效,如果我将其部署到远程服务器,显然它将停止加载该文件。我想相对于项目的根文件夹加载此文件


谢谢

根据您模糊的描述,您需要的是使用
Class.getResourceAsStream()
方法。

使用ExternalContext中的getRealPath()解决了这个问题

ExternalContext ext = FacesContext.getCurrentInstance().getExternalContext();
String resourcesPath = ext.getRealPath("/WEB-INF/resources");
File hmmFile = new File(resourcesPath + "/pos-en-bio-medpost.HiddenMarkovModel");
很好