Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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
Java$APP_包路径名变量不工作_Java_Macos_Info.plist - Fatal编程技术网

Java$APP_包路径名变量不工作

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

根据,您应该能够使用$APP_PACKAGE变量访问Mac应用程序包的根目录。因此,我认为我可以将文件存储在Contents/Resources/folder中,并通过调用

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()也是如此。