【问题标题】:Json file within a dependency could not be found找不到依赖项中的 Json 文件
【发布时间】:2017-03-21 16:16:11
【问题描述】:

因此,我编写了自己的后端并将其转换为工件(依赖项)。依赖项包含三个 .json 文件。它的目录树如下:

/resources/
/com/
/META-INF/

现在,当我尝试将依赖项作为库添加到另一个项目(访问方法等)时,会抛出此消息:

java.io.FileNotFoundException: C:\Users\Yasin\Desktop\LeagueLookup\data\deps\resources\masteries.json (The system can not find the path specified)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)

这是依赖项中的代码:

public static String PROJECT_ROOT_DIR = new File(Config.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParent();

public static String RESOURCES = PROJECT_ROOT_DIR + "/resources/";

public static File MASTERIES = new File(RESOURCES + "masteries.json");

这是我 Sysout 依赖项中的 PROJECT_ROOT_DIR 路径时的结果

C:\Users\Yasin\Desktop\Riot-API\out\production

当我在后端创建一个类并在其上运行代码时一切正常,但当我尝试将该依赖项用于另一个项目时一切都搞砸了。

我也让它使用它的真实路径

看起来像这样:

C:\Users\Yasin\Desktop\LeagueLookup\data\deps\main.jar\resources\masteries.json

但这也不起作用(我在某处读到使用 InputStream,试过了,但它总是给我 null,尽管路径非常好) 我的目标: 我想让 API 使用它自己的数据,我不想从其他来源抓取数据,而是我自己的来源。

希望你能帮助我

【问题讨论】:

  • 没有人能帮我解决这个问题吗?
  • 有时其他人需要时间来理解您的问题;)我们的帮助不会得到报酬
  • 是的,我忘了 xD 无论如何谢谢

标签: java json javafx path


【解决方案1】:

您可能误解了 java 应用程序的构造方式。

编写 java 应用程序(大多数情况下)会产生 JAR 文件,这些文件可以在任何地方执行。如果您需要访问存储在生成的 JAR 文件中的某些文件(请使用 maven 或 gradle 之类的东西),您可以使用一些 InputStream。您通过Config.class.getProtectionDomain().getCodeSource().getLocation().getPath() 进行的处理是错误的,因为有关源代码的信息可能会从已编译的.class-文件中删除,尤其是在共享/发送您的应用程序时会有所不同。

为了在你的 jar 文件中有一些存储文件的 InputStream,你可以使用这个:

ClassLoader.getSystemClassLoader().getResourceAsStream("resources/masteries.json")

由于“资源”不是 jar 内部的默认结构,您可能需要仔细检查 jar 文件中的内容。

【讨论】:

  • 这是我需要的。而且我一直都理解它,我想我只是使用了错误的类加载器(似乎 ClassLoader#getSystemClassLoader 不知何故支持在根目录中搜索资源)。所以我在其他尝试中犯的错误是使用了错误的类。非常感谢您,先生。
  • 使用 Config.class.getClassLoader().getResourceAsStream("masteries.json") 时,该文件应与 Config 类位于同一包中。我自己也经常忘记这一点;)
  • 我有点知道,但我不知道如何编辑路径以使其指向 jar 中的根目录。还是谢谢你!!!!
猜你喜欢
  • 1970-01-01
  • 2021-01-21
  • 2022-12-18
  • 2013-11-02
  • 1970-01-01
  • 2011-01-24
  • 2020-09-21
  • 2017-04-11
  • 2016-10-01
相关资源
最近更新 更多