【发布时间】:2010-03-16 15:05:49
【问题描述】:
我在 .war 文件的根目录中有一个 jsp 文件。 然后我有一个名为 STUFF 的文件夹。
如何访问 STUFF 中的 read.txt 文件?
/Name_of_war/STUFF/read.txt 是正确的路径吗?
【问题讨论】:
我在 .war 文件的根目录中有一个 jsp 文件。 然后我有一个名为 STUFF 的文件夹。
如何访问 STUFF 中的 read.txt 文件?
/Name_of_war/STUFF/read.txt 是正确的路径吗?
【问题讨论】:
webapp 的相对路径是/STUFF/read.txt。
您可以使用ServletContext#getRealPath() 将相对网络路径转换为绝对本地磁盘文件系统路径。这样,您可以在通常的 java.io 内容中进一步使用它,这些内容实际上对它正在运行的 Web 上下文一无所知。例如
String relativeWebPath = "/STUFF/read.txt";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File file = new File(absoluteDiskPath);
// Do your thing with File.
但是,如果服务器配置为在内存中而不是在磁盘上扩展 WAR,则此方法不起作用。使用getRealPath() 总是有这个警告,不建议在现实世界的应用程序中使用。如果您最终只需要获取该文件的InputStream,您可能会使用FileInputStream,那么您最好使用ServletContext#getResourceAsStream() 直接获取InputStream:
String relativeWebPath = "/STUFF/read.txt";
InputStream input = getServletContext().getResourceAsStream(relativeWebPath);
// Do your thing with InputStream.
【讨论】:
FileNotFoundException,它在本地工作,但不在网络上。很沮丧..但最后我遇到了你的答案并尝试了..效果很棒..非常感谢.. :)
如果它位于类路径中,或者您可以将文件夹添加到类路径中, 怎么样: 类加载器 classLoader = Thread.currentThread().getContextClassLoader(); InputStream 输入 = classLoader.getResourceAsStream(fileName);
【讨论】: