【问题标题】:Java: Where to write config without requiring administrative rightsJava:在哪里编写配置而不需要管理权限
【发布时间】:2012-05-02 18:28:34
【问题描述】:

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

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

提前致谢

PS 如果您没有猜到,该程序是用 Java 编写的,所以我想知道如何以编程方式获取您建议的位置。

【问题讨论】:

    标签: java file permissions settings


    【解决方案1】:

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

    .bash_history
    .bashrc
    

    在我看来,您可以在 OSX 上使用相同的内容并创建一个目录,例如,

    .myapp
    

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

    要获取文件夹的位置,可以这样做

    String homeDir = System.getProperty("user.home");
    File myAppDir = new File(homeDir, ".myapp");
    

    这大致是可以为您的应用获取自定义配置目录的代码。

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

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

    【讨论】:

    • 抱歉回复缓慢,感谢您的回答。 user.home 属性似乎正是我所需要的,我认为,为了检测天气该程序已为所有用户安装(在 Windows 上),我会将配置存储在 Program Files 或看起来好像需要管理员的东西中写入权限。由于它们的工作方式(就应用程序而言),我在 Mac 上对此并不那么烦恼。
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回答 - 这基本上是 Kal 所说的,但因为他的回答更完整,我会接受他的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 2011-02-06
    相关资源
    最近更新 更多