【问题标题】:How can I access resource files from within a Java .app bundle running on OS X, Java 7?如何从在 OS X、Java 7 上运行的 Java .app 包中访问资源文件?
【发布时间】:2012-09-05 07:46:34
【问题描述】:

请注意,我说的是 Java 7,因为自 Java 6 以来,Java .app 包的 info.plist 规范似乎发生了一些变化。

目前我的代码如下所示:

  File file = new File( "documentation/index.html" );
  if (file.exists()) {
      // opens the URI in the browser
      GUIUtils.openURI( file.toURI() );
  } else {
      // opens the URI in the browser
      GUIUtils.openURI( getClass().getResource( "/documentation/index.html" ).toURI() );
  }

在应用程序包的Java 子文件夹中,我有一个“文档”子文件夹。我尝试了很多方法,但无济于事:

  • 在 info.plist 中,将工作目录设置为 Java 文件夹(带有 -Duser.dir JVMArgument 属性) - 文件看似具有正确的路径,但 file.exists() 返回 false。
  • 尝试将 ClassPath 设置为 Java 文件夹。 (getClass().getResource() 仍然返回 null)

【问题讨论】:

  • 我想我会将文件解压缩到一个临时文件夹并从那里打开它。

标签: java macos java-7 resource-files app-bundle


【解决方案1】:

如果您准备使用 com.apple 扩展,com.apple.eio.FileManager.getPathToApplicationBundle() 将为您提供包的基本路径,然后您可以创建一个相对于该路径的 File

【讨论】:

  • 虽然我们是跨平台的,但我们可以通过反射调用该方法,所以它可以工作。谢谢!
  • 就我而言,我需要在应用程序包的 Resources 文件夹中获取文件的路径。 com.apple.eio.FileManager.getResource("filename.txt") 是我一直在寻找的,但你的回答让我明白了这一点。谢谢!
【解决方案2】:

从 Java 9 开始,com.apple 不可访问。

Java 9 使用模块来导出(和公开)包,因此 com.apple 现在不可用且已弃用。根据thisjava.awt 应该提供类似的 API 功能。

我只是想提供此更新,因为我在接受了答案后遇到了这个问题。

System.getenv("LOCALAPPDATA") 可以作为获取应用环境的选项。

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2010-11-13
    • 2017-09-22
    • 2012-09-12
    • 2016-08-10
    • 1970-01-01
    相关资源
    最近更新 更多