Java 在portlet中读取.json文件
我想通过portlet读取静态json文件(用于测试) 我已将其放在/json文件夹中。因此,部署portlet时,该文件夹位于\webapps文件夹中。 完整路径:Java 在portlet中读取.json文件,java,portlet,liferay-6,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,
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中:
@看
如果您需要将内容文件作为某种配置文件,那么您应该重新考虑您的体系结构,并从一些可配置参数(如web.xml)中找到文件的路径
记住:不要建造你不需要的东西。不要把时间浪费在以后要删除的东西上,这些东西集成在软件中。尝试去除依赖项-即使是在测试时。首先,您可以使用一些漂亮的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中:
@看
如果您需要将内容文件作为某种配置文件,那么您应该重新考虑您的体系结构,并从一些可配置参数(如web.xml)中找到文件的路径
记住:不要建造你不需要的东西。不要把时间浪费在以后要删除的东西上,这些东西集成在软件中。试着摆脱依赖项,即使是在测试中。很可能您使用分隔符的方式错误,导致路径错误。您可以通过调试甚至记录来检查这一点 尝试从计算机的资源管理器中获取实际文件的完整路径,并将其与运行时创建的路径进行比较 关于使用分隔符,您可以尝试以下操作:
String SEPARATOR = System.getProperty("file.separator");
ServletContext ctxt = FacesService.getHttpServletRequest().getSession().getServletContext();
String filepath = ctxt.getRealPath("json"+SEPARATOR+"op.json");
System.out.println("File path = "+ filepath);
很可能您使用分隔符的方式错误,从而导致错误的路径。您可以通过调试甚至记录来检查这一点 尝试从计算机的资源管理器中获取实际文件的完整路径,并将其与运行时创建的路径进行比较 关于使用分隔符,您可以尝试以下操作:
String SEPARATOR = System.getProperty("file.separator");
ServletContext ctxt = FacesService.getHttpServletRequest().getSession().getServletContext();
String filepath = ctxt.getRealPath("json"+SEPARATOR+"op.json");
System.out.println("File path = "+ filepath);
首先,您应该尝试将文件或文件夹连同访问它的文件一起包含在src目录中
URL url = getClass().getResource("op.json");
使用SOP确保文件路径中没有特殊字符(文件夹名称中没有空格,空格可以代替特殊字符)。因此,您可以访问该文件。首先,您应该尝试将文件或文件夹与访问该文件的文件一起包含在src目录中
URL url = getClass().getResource("op.json");
使用SOP确保文件路径中没有特殊字符(文件夹名称中没有空格,空格被特殊字符替代)。因此,您可以访问文件。这给了我nullPointerException这给了我nullPointerException