我在JSP页面中有以下脚本。

  File f = new File("//WEB-INF//music//rock//Evanascence//Fallen//text.txt");
  FileReader fr = new FileReader(f);
  out.println(f.exists());


我正在

FileNotFoundException: \\WEB-INF\music\rock\Evanascence\Fallen\text.txt (The network path was not found)

最佳答案

您不应该使用File API引用相关的Web内容文件。 File API相对于本地磁盘文件系统上的当前工作目录进行操作,这取决于您启动Web服务器的方式,并且绝对不能从Web应用程序的代码内部对其进行控制。

在这种情况下,您应该使用ServletContext#getResource()getResourceAsStream()

URL resource = getServletContext().getResource("/WEB-INF/music/rock/Evanascence/Fallen/text.txt");
// ...


要么

InputStream input = getServletContext().getResourceAsStream("/WEB-INF/music/rock/Evanascence/Fallen/text.txt");
// ...


(请注意,这些双正斜杠是完全没有必要的,我已经删除了它们)

如果它返回null,则它不存在。要将其包装为Reader,请使用InputStreamReader,其中您指定正确的字符编码,该编码应与文件最初保存在以下位置相同:

Reader reader = new InputStreamReader(input, "UTF-8");
// ...


也可以看看:


getResourceAsStream() vs FileInputStream




与具体问题无关,不用说在belongs中的servlet上方的代码,而不是您标记的JSP中的代码。在JSP内部,您可能会发现JSTL<c:import>标记更有用。

<c:import url="/WEB-INF/music/rock/Evanascence/Fallen/text.txt" />


或者,如果可能不存在:

<c:catch var="e">
    <c:import url="/WEB-INF/music/rock/Evanascence/Fallen/text.txt" var="text" />
</c:catch>
<c:choose>
    <c:when test="${empty e}">
        <pre><c:out value="${text}" /></pre>
    </c:when>
    <c:otherwise>
        <p>An exception occurred when reading file: <pre>${e}</pre></p>
    </c:otherwise>
</c:choose>

关于java - 如何从外部Web内容目录读取文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7892277/

10-11 02:44
查看更多