如何从运行在OSX、Java7上的Java.app包中访问资源文件?
请注意,我谈论的是Java7,因为Java.app包的info.plist规范自Java6以来似乎发生了一些变化 当前我的代码如下所示:如何从运行在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
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文件夹(使用
JVM参数属性)-文件似乎具有正确的路径,但-Duser.dir
返回falsefile.exists()
- 正在尝试设置Java文件夹的类路径。(
仍返回null)getClass().getResource()
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”)
是我一直在寻找的,但你的回答让我想到了这一点。谢谢