Java$APP_包路径名变量不工作
根据,您应该能够使用$APP_PACKAGE变量访问Mac应用程序包的根目录。因此,我认为我可以将文件存储在Contents/Resources/folder中,并通过调用Java$APP_包路径名变量不工作,java,macos,info.plist,Java,Macos,Info.plist,根据,您应该能够使用$APP_PACKAGE变量访问Mac应用程序包的根目录。因此,我认为我可以将文件存储在Contents/Resources/folder中,并通过调用 new File("$APP_PACKAGE/Contents/Resources/MyFile.txt") 然而,这似乎不起作用,我只是得到一个文件未找到错误。此外,我尝试了以下方法,看看是否可以缩小问题的范围: new File("$APP_PACKAGE/Contents").exists() //Returns f
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的导出到MacOSX应用程序包生成了MacOSX包,如果这很重要的话。任何帮助(或合适的解决方法)都将不胜感激 如果该值设置为环境变量,则可以使用
System.getEnv()
首先获取APP\u PACKAGE
的实际值,然后使用它创建文件
对象
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
检索正确的路径。如果您不知道当前的工作目录,可以打印新文件(“.”)的值。getAbsolutePath()
我找到了!尽管应用程序很难告诉我工作目录是什么,但我还是设法找到了应用程序所在的文件夹。然后,我通过将应用程序作为目录引用来解决这个问题:
new File("MyApp.app/Contents/Resources/MyFile.txt").exists() //Returns true!!!
我还想补充一点,我在上找到了将以下内容添加到我的info.plist文件的建议:
<key>WorkingDirectory</key>
<string>$APP_PACKAGE/Contents/Resources</string>
工作目录
$APP_软件包/内容/资源
不幸的是,这在Mac OS 10.7.5上似乎不起作用,工作目录被重置为应用程序所在的文件夹。System.getenv(“APP_PACKAGE”)为我返回一个空字符串。关于Mac OS X捆绑包的结构,您是对的(在Resources文件夹中有一个Java文件夹,其中包含所有需要的JAR文件). 不幸的是,../Resources/YourFile.txt无法工作,新文件(“.”).getAbsolutePath()会导致NullPointerException。getPath()也是如此。