【问题标题】:getResourceAsStream filepath while running .jar运行 .jar 时的 getResourceAsStream 文件路径
【发布时间】:2023-04-09 19:49:01
【问题描述】:

我的代码:

BufferedInputStream bis =
  new BufferedInputStream(getClass().getResourceAsStream("playerhit.mp3"));

playerhit.mp3 文件与正在运行的MP3.class 位于同一包中时,此代码可以正常工作。我将其作为.jar 运行。如果我将文件路径更改为/src/data/audio/playerhit.mp3 之类的东西,它就不再起作用了。以 .jar 运行时,是否可以访问与包的根目录不同的文件路径?

【问题讨论】:

  • 在构建过程中playerhit.mp3 是否已复制到您的类路径中?你用什么来构建:Ant、Maven、...?
  • 我不这么认为...而且我正在使用netbeans构建。
  • 您是否使用“data/audio/playerhit.mp3”而不是“playerhit.mp3”?
  • 是的,我确实使用了那个路径
  • 将该路径放入 getResourceAsStream() 会发生什么?

标签: java jar inputstream filepath


【解决方案1】:

看看Javadoc for getResourceAsStream(...)

如果参数以/ 开头,则资源的绝对名称是/ 后面的名称部分。否则,绝对名称的格式如下: modified_package_name/name 其中modified_package_name 是此对象的包名,其中/ 替换为.

因此,如果您的 playerhit.mp3 位于包结构的根目录中,则应将其引用为 /playerhit.mp3。如果它在/src/data/audio/ 中,您可能应该使用/data/audio/playerhit.mp3 - 但请检查您的JAR 文件的内容以确定。

【讨论】:

  • 它是/data/audio/playerhit.mp3。我尝试使用“/data/audio/”,即使直接从 netbeans 运行也无法正常工作,“./data/audio”在其他情况下也可以工作,但从 .jar 运行时则不行
  • data 文件夹是否位于 Netbeans 的类路径中? getResourceAsStream() 方法只加载类路径上的资源。
  • 好吧,现在我觉得自己很愚蠢。在将路径用作没有斜杠或点的“data/audio/filename.mp3”之后,我让它工作了。干杯,希望这至少对其他人有所帮助
【解决方案2】:

首先检查文件是否真的在 jar 中。

检查罐子内的位置。

相对路径:当前包

绝对路径:jar 的根目录

【讨论】:

    猜你喜欢
    • 2017-05-05
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 2012-03-23
    相关资源
    最近更新 更多