【问题标题】:Accessing resources within a JAR file访问 JAR 文件中的资源
【发布时间】:2012-04-26 13:58:57
【问题描述】:

我正在尝试访问已嵌入 JAR 文件中的资源。需要访问文件的类是:

/worldEntities/factories/RoomFactory.class

它尝试访问:

/map-data/roomDescriptions.xml

为此,我在 RoomFactory.class 中添加了以下代码:

Document doc = docBuilder.parse(this.getClass().getResourceAsStream("/map-data" + File.separator + "roomDescriptions.xml"));

当我在 NetBeans 中执行项目时,它运行良好,没有错误。但是,当我尝试从命令行运行代码时,输​​入

java -jar Program.jar

我得到一个 java.lang.IllegalArgumentException: InputStream cannot be null,它指向我上面描述的代码。

提前感谢您的帮助,

托马斯

【问题讨论】:

  • 如果您使用 File.separator,那么您应该始终如一地使用它,包括前导斜杠。另一方面,在 getResourceAsStream 调用中使用它是错误的,因为它不代表本机文件系统路径。只需使用斜线即可,保证跨平台。

标签: java file resources path


【解决方案1】:
  1. 带有 "-" 字符的名称不是有效的 Java 包名称。所以"map-data" 不是一个有效的包名。

  2. 那么File.separator 在不同的平台上可能会有所不同。在您的代码中使用"/" 以确保使用有效的包分隔符。

【讨论】:

    【解决方案2】:

    您需要确保将资源与 .jar 捆绑在一起,否则将找不到它

    This post 应该可以帮助您从 NetBeans 中做到这一点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-24
      • 2012-11-28
      • 2013-07-20
      • 2013-04-09
      • 2011-02-08
      • 2013-12-07
      • 2020-01-31
      相关资源
      最近更新 更多