将getResourceAsStream用于BufferedReader和InputStream

时间:2014-03-03 12:18:14

标签: java jsp tomcat servlets

我正在编写webApp,使用jsp文件直接调用java类来获取结果。

JSP文件如下:

<%
    String queryKey = request.getParameter("id");
    int jobID = Integer.parseInt(queryKey);
    out.println(jobID);
    ArrayList<Integer> myTopList = JobRecByBoWJaccard.topJobsByBoW(jobID);
%>

在java类中,可以通过以下方式访问文件:

BufferedReader br = new BufferedReader(new FileReader("WebContent/StopWords/stop-words-english1.txt"));

private InputStream modelInputT = new FileInputStream("WebContent/OpenNLP_Models/en-token.bin");

tomcat找不到引用的文件,有人说使用getResourceAsStream,但这是针对servlet的。我直接调用java类而没有任何servlet。

private InputStream modelInputT = = this.getClass().getClassLoader().getResourceAsStream("WebContent/OpenNLP_Models/en-token.bin");

这导致java类也无法找到该文件。需要帮助以及如何更改这些java类?

1 个答案:

答案 0 :(得分:1)

  

tomcat无法找到引用的文件...

这是因为路径名不正确,除非JVM的当前目录是“WebContent”目录的父目录。使用FileInputStream打开文件时,相对路径名将在启动时相对于JVM 的当前目录进行解析

  

...有人说使用getResourceAsStream,但这是针对servlet的。

没有。这也不正确。该方法不是“for servlets”。该方法的目的是打开类/类加载器的类路径上的资源。如果您的“WebContent / StopWords / stop-words-english1.txt”位于webapp的“/ WEB-INFO / classes”或“/ WEB-INFO / lib”中的JAR文件中,那么getResourceAsStream将会找到它


在您的情况下,您似乎在谈论与默认servlet对应的“WebContent”目录。

在这种情况下,请阅读此Q&amp; A - How can I get real path for file in my WebContent folder?

因此,如果您尝试从JSP中访问这些文件,似乎您应该写这个:

  new FileReader("WebContent/StopWords/stop-words-english1.txt")

这样:

  new FileReader(getServletContext().getRealPath(
          "/StopWords/stop-words-english1.txt"))