3

我在我的网络应用程序中打开文件时遇到了麻烦。我在 Eclipse 中本地尝试了它,它工作正常,但是当我尝试在 Openshift 上的 Tomcat 6 上部署它时,它找不到我的 web 应用程序的资源文件。ProjectFiles目录中存储的目录中有一些txt文件WEB-INF;本地打开文件的代码是

String nome_file = "C\:\\Users\\miKKo\\workspace\\fantacalcio_project\\WebContent\\WEB-INF\\ProjectFiles\\Risultati\\risultati_" + nome_lega + ".txt"; 

BufferedReader reader = new BufferedReader(new FileReader(nome_file));

我已将它们推送到同一存储库中的 Git 中(在服务器上我将我的项目重命名为“ROOT”),并且我已经用这个替换了字符串

String nome_file = this.getServletConfig().getServletContext().getContextPath()+"/WebContent/WEB-INF/ProjectFiles/Risultati/risultati_" + nome_lega + ".txt";

但它不起作用。我也尝试过使用上下文属性

/var/lib/openshift/51c6178a5004467630000019/jbossews/work/Catalina/localhost/_/WEB-INF/ProjectFiles

但抛出的异常总是

java.io.FileNotFoundException: (#path) (没有这样的文件或目录)

我能为此做些什么?

4

2 回答 2

2

由于我没有获得应用程序的根真实路径,因此我以这种方式解决了:

String path="/WEB-INF/ProjectFiles/Risultati/risultati_test.txt";
InputStream inputStream = this.getServletConfig().getServletContext().getResourceAsStream(path);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

现在它可以工作了。顺便说一句,我还在这里找到了有用的信息

getResourceAsStream() 与 FileInputStream

于 2013-06-30T21:54:44.793 回答
2

假设您的文件位于以下位置:

/WEB-INF/ProjectFiles/Risultati/risultat_text_file.txt

然后使用:

String path = "/WEB-INF/ProjectFiles/Risultati/risultat_text_file.txt";
InputStream inputStream =  new FileInputStream(this.getServletConfig().getServletContext().getRealPath(path));

应该为你工作。请注意,ServletContext.getRealPath()返回对应于给定虚拟路径的真实操作系统路径。

编辑:

如果这对您的情况不起作用,您确实需要重新访问您的虚拟路径。您可以手动检查此文件是否存在于 war 文件的预期目录中,或者您可以记录该getRealPath()方法的输出以检查实际情况!如有必要,您可以"/"输入您的getRealPath()方法并检查您的应用程序的根路径是什么。

于 2013-06-29T17:47:18.983 回答