Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从运行在OSX、Java7上的Java.app包中访问资源文件?_Java_Macos_Java 7_Resource Files_App Bundle - Fatal编程技术网

如何从运行在OSX、Java7上的Java.app包中访问资源文件?

如何从运行在OSX、Java7上的Java.app包中访问资源文件?,java,macos,java-7,resource-files,app-bundle,Java,Macos,Java 7,Resource Files,App Bundle,请注意,我谈论的是Java7,因为Java.app包的info.plist规范自Java6以来似乎发生了一些变化 当前我的代码如下所示: File file = new File( "documentation/index.html" ); if (file.exists()) { // opens the URI in the browser GUIUtils.openURI( file.toURI() ); } else { // opens

请注意,我谈论的是Java7,因为Java.app包的info.plist规范自Java6以来似乎发生了一些变化

当前我的代码如下所示:

  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
子文件夹中,我有一个“documentation”子文件夹。我尝试了多种方法,但均无效:

  • 在info.plist中,将工作目录设置为Java文件夹(使用
    -Duser.dir
    JVM参数属性)-文件似乎具有正确的路径,但
    file.exists()
    返回false
  • 正在尝试设置Java文件夹的类路径。(
    getClass().getResource()
    仍返回null)

如果您准备使用
com.apple
扩展名,
com.apple.eio.FileManager.getPathToApplicationBundle()
将为您提供捆绑包的基本路径,然后您可以创建一个与之相关的
文件。

从Java 9开始,
com.apple
无法访问

Java9使用模块导出(和公开)包,因此
com.apple
现在不可用且不推荐使用。根据,
java.awt
应该提供类似的API功能

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


System.getenv(“LOCALAPPDATA”)
可用作获取应用程序环境的选项

我想我应该将文件解压缩到一个临时文件夹,然后从那里打开它。虽然我们是跨平台的,但我们可以通过反射调用该方法,所以它可以工作。谢谢在我的例子中,我需要获取应用程序包的Resources文件夹中的文件路径
com.apple.eio.FileManager.getResource(“filename.txt”)
是我一直在寻找的,但你的回答让我想到了这一点。谢谢