假设我有一个跨平台的可运行应用程序
此应用程序创建然后在外部文件中读/写一些数据和首选项
Bundle层次结构如下:
ApplicationFolder/application.jar
ApplicationFolder/database.odb
ApplicationFolder/config.xml
无论是在Mac,Windows还是Linux上,应用程序都知道一切都在她旁边(即:/database.odb或/config.xml)
现在出现了JavaFx 2提供的自包含应用程序功能
该应用程序嵌入在Windows上的.exe,Mac上的.app中,还不知道Linux ......
作为Mac用户,我在Mac上测试了它,并看到现在在用户根路径创建了database.odb和config.xml
我同意我应该考虑使用跨平台机制来保存/读取有关操作系统的应用程序首选项
但我不太确定该怎么做以及如何做(也找不到任何谷歌搜索帮助..)
在Windows上,.exe安装在一个文件夹中,所以我想我可以保持相同的行为
在Mac上,.app是一个文件夹,我应该保留所有内容(如何获取.app路径?!)
Java / JavaFx中是否没有内置机制?
非常感谢任何评论,建议,文档或其他您可以给我的信息
Badisi
答案 0 :(得分:2)
有很多方法可以做到这一点。我在这里列出了一些没有特别的顺序。建议的方法取决于存储的数据类型。
Java提供了几种机制(例如properties API和preferences API)来维护应用程序首选项。
如果您的应用程序足够复杂以便从数据库中受益,那么您可能希望使用Java EE或Spring,它们都有自己的配置机制。
对于只读配置,您可以将相关文件捆绑在应用程序jar中。
要相对于应用程序jar存储自定义应用程序配置文件或客户端应用程序范围数据库,请在运行时写入所需文件。请参阅How do I get the directory that the currently executing jar file is in?。
对于特定于用户的配置,使用System.getProperty("user.home")
检索用户的主目录,然后为具有隐藏文件属性的首选项存储(例如"{$user.dir}/.myapp"
)创建一个子目录,以便它不会显示在标准文件目录列表中。
如果您的应用依赖互联网连接,那么您可以存储一些此信息服务器端而不是客户端,并使用互联网协议从客户端使用它。这种方法的一个优点是用户配置和数据可以自动移植到客户端计算机上。