我有一个Java应用程序,它使用Sqlite数据库文件来存储应用程序的配置,用户的首选项和其他参数。在运行时期间读取和写入数据。现在我必须为这个应用程序制作一个安装程序(现在,它将在Windows上运行)。
我想在.Net上有类似于IsolateStorage的东西,所以我将为我的应用程序专门创建一个文件夹,为所有用户提供读/享权限,不会有其他应用程序损坏我的数据或我的应用程序的风险损坏其他应用程序的数据。
我找到了几个存储Sqlite数据库文件的选项,但这些都是我发现的不方便(我使用的是Windows 7 x64):
使用System.getProperty("user.home")
或System.getenv("HOMEPATH")
:我不喜欢这个位置,因为只要这是用户的文件夹,用户就可以直接编辑或删除数据库。我可以从应用程序的安装文件夹中删除新副本,但它会重置应用程序的选项和配置。
使用System.getenv("APPDATA")
:在Windows上它指向Roamming文件夹,数据必须只在安装了应用程序的机器中。
使用System.getenv("LOCALAPPDATA")
:看起来是最好的解决方案,但它为我提供了所有应用程序的本地数据文件夹。我可以为我的应用程序创建一个子文件夹,但是我不能100%确定另一个应用程序是否会创建一个具有相同名称的文件夹(我可以使用guid-ed生成的文件夹名称来避免这种情况),而且我不会&#39知道如果一个疯狂的特权'配置将避免我的应用程序在此位置写入。在我的机器中,它指向" C:\ Users \ MyUser \ AppData \ Local"。
使用System.getenv("PROGRAMPDATA")
:同样的:我可以为我的应用程序创建一个子文件夹,而且我不知道是否有一个疯狂的特权'配置将避免我的应用程序在此位置写入。在我的机器中,它指向" C:\ ProgramData"。
使用System.getProperties(java.class.path)
:直接进入应用程序的安装文件夹,这是禁忌。
我在哪里可以存储SQLite数据库,因此用户在安装我的应用程序后不会遇到任何问题?