【问题标题】:URI is not hierarchical when loading file from .jar从 .jar 加载文件时 URI 不是分层的
【发布时间】:2016-12-29 02:51:16
【问题描述】:

所以我在从 jar 文件运行程序时加载文件时遇到问题。我知道存在与此非常相似的问题,但我找不到对我有用或做我需要的问题。我想从我的 jar 中的一个文件夹中加载一个目标文件,但是当我这样做时,我收到以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(Unknown Source)
        at bbsource.BouncyBallV5.loadLevels(BouncyBallV5.java:370)
        at bbsource.BouncyBallV5.<init>(BouncyBallV5.java:243)
        at BBDriver.main(BBDriver.java:18)

370行如下

initSource = new File(getClass().getResource("/resources/levels").toURI());

从 Eclipse 运行时,我对这一行没有任何问题,但我知道 jar 文件中的行为有所不同。文件夹层次结构是:

    • 资源
      • 级别
        • tier_one
          • Level1.cbbl
          • Level2.cbbl
        • tier_two
          • Level1.cbbl

levels 是一个不允许我访问的目录,我不知道如何让它工作。我已经看到了诸如使用InputStream 之类的建议,但我不确定如何使用它并且仍然将它视为我可以从中读取对象的文件。

任何帮助将不胜感激。

【问题讨论】:

    标签: java io uri java-io


    【解决方案1】:

    这是因为/resources/levels 是目录而不是文件。检查this question的答案

    【讨论】:

    • 我用它作为一个目录来访问它的子目录,最终它是文件,但出于索引的原因,我需要类似目录的结构。而且我仍然不确定我将如何实际使用InputStream。关于我如何使用initSource 的代码会有帮助吗?
    • 尝试使用initSource = new File(getClass().getResource("/resources/levels").getFile())
    • 这在 Eclipse 中仍然有效,但是当从命令提示符作为 jar 运行时我仍然收到错误。但是,这次错误是NullPointerException
    • 我设法通过使用 .zip 文件和 ZipInputStream 找到解决问题的方法。不过感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多