0

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

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

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

我知道我可以尝试使用 ClassLoader 方式,但我想避免这种情况(出于安全原因)。

还是有更好的方法来在本地存储应用程序缓存和配置数据?

4

2 回答 2

1

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

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

引用的示例java.util.prefs.Preferences使用了,但是javax.jnlp.PersistenceService是一种替代方法

于 2012-05-19T02:18:31.793 回答
1

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

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

我的解决方案:

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

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

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

于 2012-08-28T21:23:00.533 回答