MacOSX 上的 Java:如何访问bundle中的文件



我有一个Java应用程序,我正在将其打包到Mac应用程序捆绑包中(该文件夹结构包含所有应用程序,但对用户来说看起来像单个可执行文件(。

我的问题:我正在本地文件夹("."(中读取和写入一些配置文件。但是,在Mac上,这似乎是应用程序包所在的文件夹(因此通常是"应用程序"文件夹,我显然不希望这样。

我的问题:如何将文件存储在该捆绑包中?如何以编程方式检索捆绑包名称以计算完全限定的文件夹?

我知道我可以尝试采用类加载器的方式,但我想避免这种情况(出于安全原因(。

或者是否有一种更好的方法可以在本地存储应用程序缓存和配置数据?

Mac OS X Finder 会将名称以 .app 结尾的任何目录视为应用程序;右键单击以显示程序包内容。它仍然是用于 I/O 目的的正常目录。这个项目就是一个例子。有关相对于应用程序捆绑包的路径,请参阅此答案。

附录:有没有更好的方法在本地存储应用程序缓存和配置数据?

引用的例子使用java.util.prefs.Preferences,但javax.jnlp.PersistenceService是另一种选择。

好的,基本的答案/解决方案是:不要这样做。

我最初想这样做的原因是在本地HD上缓存大量数据。 Java首选项是配置数据(即少量数据(的不错选择,但无法处理兆字节大小范围内的数据。

我的解决方案:

在MacOSX(System.getProperty("os.name").contains("Mac OS X")(上,我只需在用户的主文件夹(System.getProperty("user.home")(中创建一个文件夹。我在该文件夹前面加上一个.,以确保它对用户隐藏。这也确保了我对文件夹具有写入权限(这可能是.app文件夹中的问题,具体取决于用户将其复制到的位置(

在 Windows ( System.getProperty("os.name").contains("Windows") ( 上,我在 System.getenv("APPDATA") 目录中创建了该文件夹(请注意,此 env 变量仅存在于 Windows 系统上。

现在我可以完全访问文件系统(即使没有管理员权限(,并且可以存储任意数量的数据。

最新更新