在Openshift上的servlet中打开资源文件

时间:2013-06-29 17:18:56

标签: java tomcat servlets deployment openshift

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

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)(没有这样的文件或目录)

我能为此做些什么?

2 个答案:

答案 0 :(得分: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()返回与给定虚拟路径对应的实际OS路径。

修改

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

答案 1 :(得分: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() vs FileInputStream