如何从外部网页内容目录读取文件
我在 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 (未找到网络路径)
I have the following scriptlet inside a JSP page.
File f = new File("//WEB-INF//music//rock//Evanascence//Fallen//text.txt");
FileReader fr = new FileReader(f);
out.println(f.exists());
I'm getting a
FileNotFoundException: \\WEB-INF\music\rock\Evanascence\Fallen\text.txt (The network path was not found)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不应使用
File
API 来引用相关的 Web 内容文件。File
API 相对于本地磁盘文件系统上的当前工作目录进行操作,这取决于您启动 Web 服务器的方式,并且无法从 Web 应用程序的代码内部进行控制。在这种特殊情况下,您应该使用
ServletContext#getResource()
或getResourceAsStream()
:或
(请注意,那些双正斜杠完全没有必要,我已经删除了它们)
如果它返回
null
,则它不存在。要将其包装在Reader
中,请使用InputStreamReader
其中您指定正确的字符编码,该编码应与文件最初保存的位置相同:另请参阅:
与具体问题无关,不用说代码上面属于 servlet,而不是您标记的 JSP 中。在 JSP 内部,您可能会找到 JSTL 的
标记更有用。或者如果它可能不存在:
You shouldn't use the
File
API to reference relative webcontent files. TheFile
API operates relative to the current working directory on the local disk file system, which is dependent on how you started the webserver and is in no way controllable from inside the webapplication's code.In this particular case you should rather use
ServletContext#getResource()
orgetResourceAsStream()
:or
(note that those double forward slashes are totally unnecessary, I already removed them)
If it returns
null
then it don't exist. To wrap it in aReader
, useInputStreamReader
wherein you specify the proper character encoding which should be the same as the file is originally saved in:See also:
Unrelated to the concrete question, needless to say that the code above belongs in a servlet, not in a JSP as you tagged. Inside a JSP, you may find the JSTL's
<c:import>
tag more useful.Or if it is possibly non-existing: