[英]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.