0

根据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 包,如果这很重要的话。任何帮助(或合适的解决方法)将不胜感激!

4

2 回答 2

1

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

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

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

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

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

于 2013-01-13T18:47:02.440 回答
0

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

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

也就是说,从您给定的链接的阅读中,我想知道这个变量是否只是在从plist文件中读取时才被使用,而不是在您的 Java 进程中。如果变量实际上没有作为环境变量提供给您的 Java 程序,您可以Contents轻松地在目录中检索您的文件,因为我记得 Mac 上的应用程序打包应该具有以下架构

/Contents
  /MacOS
    YourBinary
  /Resources
    YourFile.txt

根据您的应用程序的当前工作目录(我认为它应该默认为/Contents/MacOS),您可以使用../Resources/YourFile.txt. 如果您不知道当前工作目录,您可以打印new File(".").getAbsolutePath()

于 2013-01-13T08:14:59.230 回答