我在我的网络应用程序中打开文件时遇到了麻烦。我在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)(没有这样的文件或目录)
我能为此做些什么?
答案 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));
现在它有效。顺便说一句,我也在这里找到了有用的信息