簡體   English   中英

如何從外部Web內容目錄中讀取文件

[英]How to read file from outside web content directory

我在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 (The network path was not found)

您不應使用File API來引用相關的webcontent文件。 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");
// ...

也可以看看:


具體問題無關 ,不用說上面的代碼屬於 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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM