java - 如何从外部网页内容目录读取文件

标签 java jsp

我在 JSP 页面中有以下 scriptlet。

  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(找不到网络路径)

最佳答案

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

在这种特殊情况下,您应该使用 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");
// ...

另见:


不相关具体问题,不用说上面的代码belongsservlet ,而不是在您标记的 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 - 如何从外部网页内容目录读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892277/

相关文章:

javascript - 将 div id 值存储在 JS/JSP 中的变量中

java - jspx页面无法获取模型变量

java - Jasper Reports 中的新行?

javascript - jQuery-Enter键事件功能重复提醒

java - 创建 elasticsearch 客户端抛出 netty IllegalStateException

java模块访问问题: "Class in a module cannot access class in unnamed module because module x does not read unnamed module y"

jsp - 如何使用strut标签在JSP中迭代hashmap

javascript - 我需要将下一行放入带有 java 值的弹出 javascript 字符串中

java - 如何使用 JNLP 文件选择器返回文件路径

java - 字符串常量池和实习生