我想通过 portlet 读取静态 json 文件(用于测试)。
我已将其放在/json 文件夹中。因此,当部署 portlet 时,该文件夹在\webapps 文件夹中可用。
完整路径:webapps\myPortlet\json\op.json
在processAction方法中 -
@Override
public void processAction(ActionRequest request, ActionResponse response)
throws PortletException, IOException {
JSONParser parser = new JSONParser();
try {
JSONObject jsonObject = (JSONObject) parser.parse(new FileReader
(request.getContextPath() + "/json/op.json"));
.
.
.
}
我收到 FileNotFoundException。
有人可以给我指出访问此文件的正确方法吗?
最佳答案
首先,您可以使用一些不错的 System.out 来帮助自己(但请稍后将其删除,这样它就不会污染日志文件)。
如果您打印此信息
System.out.println( "request.getContextPath(): " + request.getContextPath() );
System.out.println( "new File(request.getContextPath()) : " + new File(request.getContextPath()).getAbsolutePath() );
你会发现一点惊喜。您将从中获得更多信息
System.out.println( "new File() : " + new File().getAbsolutePath() );
如果您确实需要加载静态文件,您应该问自己为什么要这样做以及您将从中得到什么。不要编写一些以后不需要的东西。也许您可以找到更好的解决方案 - 甚至是更好的(自动)可测试的解决方案。
如果您确实需要静态文件(例如图像),您可以将其放入类附近的 jar 中:
@参见How to get a path to a resource in a Java JAR file
如果您需要内容文件作为某种配置文件,您应该重新考虑您的架构并从一些可配置参数(例如从 web.xml 中)找到文件的路径。
记住:不要构建你不需要的东西。不要将时间浪费在稍后要删除的软件中集成的内容上。尝试摆脱依赖关系 - 即使是为了测试。
关于java - 在 portlet 中读取 .json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24148683/