【问题标题】:Unable to fetch Json file from separate project in Eclipse无法从 Eclipse 中的单独项目中获取 Json 文件
【发布时间】:2023-03-04 21:41:01
【问题描述】:

我有一个想要加载 JSON 的 java 应用程序。我正在调用的 API 方法采用 InputReader,所以我尝试了以下代码:

ClassLoader classLoader = Assets.class.getClassLoader();
new InputStreamReader(classLoader.getResourceAsStream("data/clientJson.json")));

该文件位于“data”文件夹下的Assets 包中,但InputStreamReader 总是抛出异常,指出输入为Null

如果我将文件移到类旁边并更改 Classloader 以引用它可以工作的同一类,但不适用于 Assets 类。

我已经尝试了名称路径的所有排列方式,但均无济于事。

【问题讨论】:

  • 你不能有一个与包名相同的完全限定类名——它会在运行时和编译时引起问题。为什么要移动文件?标题中的单独项目是如何涉及的?
  • 该项目是使用 PlayN 框架创建的。它为 Shared、Assets、Android、Java、Html5 等构建使用单独的包。该框架带有用于加载 PlayN 相关资产的内置方法,但没有内置 JSON 支持。
  • 您可能想将“Package”更改为“Project”(如果我理解正确的话)

标签: java json eclipse inputstream


【解决方案1】:

试试

new InputStreamReader(getClass().getClassLoader().getResource("data/clientJson.json"));

编辑:

来自 http://docs.oracle.com/javase/7/docs/api/java/lang/ClassLoader.html 的静态 URL

       getSystemResource(String name)
      //Find a resource of the specified name from the search path used to load classes.

顺便说一句,我总是使用 .getInputStream();例如:

  BufferedReader stream = new BufferedReader(new  InputStreamReader(new FileInputStream(object.getInputStream()));

【讨论】:

  • getResource 返回一个 URI 对象,InputStreamReader 不会接受它作为构造函数参数。有没有办法让 InputStreamReader 获取 URI?
【解决方案2】:

如果您的其他 Eclipse 项目已导入,并且 data/ 文件夹位于 src/ 文件夹下(或在其他项目中标记为类路径资源),那么它将起作用。我认为您首先需要验证 Eclipse 导入/导出关系和其他文件夹类路径是否正确。

如果您转到资产(在我的示例中为 A)项目的属性,resources/ 文件夹必须位于“Order and Export”下。您可以在“库”下将其添加为“类路径文件夹”。并且 Assets 项目必须是“构建路径上的必需项目”。注意 A/src/main/resources 上的“类路径文件夹”图标。

【讨论】:

  • Eclipse 给我的“合格名称”是:/assets/src/main/resources/assets/data/clientJson.json。
  • 这看起来你需要加载assets/data/clientJson.json
  • 仍然抛出空指针异常。 Eclipse中是否有一些我需要设置的项目设置?
  • 截图澄清了事情,我已经启动并运行了。
  • 感谢@ChargerIIC 的反馈。您能否查看我对您问题的上述评论,我认为当您的意思是“Eclipse 项目”时使用“包”一词会产生误导(正如您在对问题的第一条评论中看到的那样)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
相关资源
最近更新 更多