Java $ APP_PACKAGE路径名变量不起作用

时间:2013-01-13 07:50:58

标签: java macos info.plist

根据Java Info.plist Key Reference for Mac,您应该能够使用$ APP_PACKAGE变量来访问Mac应用程序包的根目录。所以我认为我可以在Contents / Resources /文件夹中存储一个文件,并通过调用

来访问它
new File("$APP_PACKAGE/Contents/Resources/MyFile.txt")

然而,这似乎不起作用,我只是得到一个文件未找到错误。此外,我尝试了以下内容,看看是否可以缩小问题范围:

new File("$APP_PACKAGE/Contents").exists() //Returns false
System.out.printline(new File("$APP_PACKAGE").getParent()) //Returns an empty string

如果重要的话,我确实使用Eclipse的Export to Mac OS X应用程序包生成了Mac OS X软件包。任何帮助(或合适的解决方法)将不胜感激!

2 个答案:

答案 0 :(得分:0)

如果将值设置为环境变量,则可以使用System.getEnv()首先获取APP_PACKAGE的实际值,然后使用它创建File对象。

String appPackage = System.getEnv("APP_PACKAGE");
new File(appPackage + "/Contents/Resources/MyFile.txt");

那就是说,从你的given link的阅读开始,我想知道这个变量是从plist文件中读取而不是在Java进程中读取的。如果变量实际上没有作为Java程序的环境变量给出,那么您可以轻松地在Contents目录中检索文件,因为我记得Mac上的应用程序包装应该具有以下架构

/Contents
  /MacOS
    YourBinary
  /Resources
    YourFile.txt

根据您应用的当前工作目录(我认为它应默认为/Contents/MacOS),您可以使用../Resources/YourFile.txt检索正确的路径。如果您不知道当前工作目录,则可以打印new File(".").getAbsolutePath()

的值

答案 1 :(得分:0)

我明白了!即使应用程序很难告诉我工作目录是什么,我还是设法弄清楚它是应用程序所在的文件夹。然后我通过将应用程序称为目录来解决它:

new File("MyApp.app/Contents/Resources/MyFile.txt").exists() //Returns true!!!

我还想补充一点,我在this blog post上找到了将以下内容添加到我的info.plist文件中的建议:

<key>WorkingDirectory</key>
<string>$APP_PACKAGE/Contents/Resources</string>

不幸的是,这似乎不适用于Mac OS 10.7.5,工作目录只是重置为应用程序所在的文件夹。