Java:在何处编写配置而不需要管理权限

Java:在何处编写配置而不需要管理权限,java,file,permissions,settings,Java,File,Permissions,Settings,我真不敢相信我会这么说,但自从把我的程序移植到OSX并习惯了权限之后,我意识到我计划在Windows上做的事情将无法按我所希望的方式工作。目前,在windows上,“我的程序”将其设置存储在注册表(HKLM)中,并将一些用户可编辑的资源存储在程序文件旁边的文件夹中。出于各种原因,我现在决定将配置/设置存储在一个文件中,用户将能够知道其他资源保存在哪个文件夹中 所以我现在的问题是在哪里存储配置文件。很明显,它将被更新,但我不想让程序必须需要管理员权限才能运行。我想提供一个选项,让所有用户都可以使用

我真不敢相信我会这么说,但自从把我的程序移植到OSX并习惯了权限之后,我意识到我计划在Windows上做的事情将无法按我所希望的方式工作。目前,在windows上,“我的程序”将其设置存储在注册表(HKLM)中,并将一些用户可编辑的资源存储在程序文件旁边的文件夹中。出于各种原因,我现在决定将配置/设置存储在一个文件中,用户将能够知道其他资源保存在哪个文件夹中

所以我现在的问题是在哪里存储配置文件。很明显,它将被更新,但我不想让程序必须需要管理员权限才能运行。我想提供一个选项,让所有用户都可以使用该程序(像大多数程序一样),这当然需要管理员,因此这就引出了第二个问题:我应该在哪里存储配置文件(以及保存其他资源的文件夹)我如何检测程序是否已为所有用户安装,还是仅为一个用户安装

提前谢谢


PS如果您没有猜到,该程序是用Java编写的,因此我想知道如何通过编程获得您建议的位置。

在*nix兼容程序中,通常的做法是将信息存储在以名称开头的文件夹中。在用户的主目录中

.bash_history
.bashrc
在我看来,你可以在OSX上使用同样的方法,然后创建一个目录

.myapp
您可以在该目录下以任何格式存储任意数量的文件

要获取文件夹的位置,可以执行以下操作

String homeDir = System.getProperty("user.home");
File myAppDir = new File(homeDir, ".myapp");
这大致就是可以为应用程序获取自定义配置目录的代码

请注意,点文件/文件夹与windows中的隐藏文件夹有些相似。默认情况下,文件管理器通常不会显示这些文件/文件夹


要确定是否为所有用户安装了该程序,可以在管理员(root)控制的位置创建配置,如/etc(不确定Mac)。用户配置始终可以覆盖默认配置。不过,可能有更好的方法来处理这个问题。

在windows和unix上,用户(通常)都有一个(主)文件夹,对该文件夹具有完全权限。您可以在主文件夹中创建一个目录,并让您的用户配置文件驻留在主文件夹中。

很抱歉回复太慢,谢谢您的回答。
user.home
属性似乎正是我所需要的,我认为,为了检测是否为所有用户(在Windows上)安装了该程序,我会将配置存储在程序文件或其他文件中,似乎需要管理员权限才能写入。我对Mac上的这个问题不太在意,因为它们的工作方式(在应用方面)。谢谢你的回答——基本上是Kal说的,但因为他的答案更完整,我会接受他的。