java - 在 portlet 中读取 .json 文件

标签 java portlet liferay-6

我想通过 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/

相关文章:

java - 从 Play 商店下载后,Google map 无法使用

java - Apache 运行 java web 应用程序时出错

java - Struts2 portlet NotSerialized 异常

java - 从 servlet 获取 serviceContext

javascript - PrimeFaces 5.0 javascript 错误 - b.debug("PrimeFaces 已经加载

javax.net.ssl.SSLProtocolException : handshake alert: unrecognized_name on java 1. 8

java - 当自定义 validator 使用 @Component 注释时,JSR-303 验证将被忽略

web-services - 使用 Liferay 使用 Web 服务

spring-mvc - 在 Spring Portlet MVC 中设置模型错误的正确方法

liferay - 在 Portlet Liferay 6.1 内呈现 Liferay 页面 URL