English 中文(简体)
如何在Java中创建.INI文件以存储一些设置?
原标题:
  • 时间:2008-10-11 00:35:03
  •  标签:

我想创建一个ini文件来存储我的应用程序的一些设置。在找到jar文件的位置并在那里创建ini文件是一个好主意吗?如果是的话,我该如何找到jar文件的位置?

但是如果您知道像这样的更好的解决方案,我希望能听到一些。

编辑:我使用mac并想在windows中运行同一个应用程序。我可以在System.getProperty(“user.home”)目录中编写一些内容,但是如果用户决定删除应用程序,我希望保持系统干净。是否有更好的方法来存储设置文件,例如在应用程序相同的目录中?

最佳回答

您可以使用ClassLoader来定位应用程序目录。参见:Java:查找应用程序目录。不要使用.INI文件,而是使用.properties文件 - 您可以通过Properties类来加载和保存此文件。

正如其他人指出的那样,您不应该将用户设置写入应用程序目录。如果用户无法写入应用程序目录怎么办?如果您的应用程序正在被同一系统上的多个用户同时使用怎么办?即使在Windows上,这些情况也并不少见。

您可能仍然希望从应用程序目录加载一些设置-也许管理员已在那里配置了默认设置。

一个常见的惯例是将用户设置保存到用户的主目录中:

/home/user/.eclipse
C:Documents and SettingsUser.eclipse

虽然这意味着您可能会留下散置的文件,但如果用户重新安装应用程序,则可能会有益。 在README文件中记录这些内容。以下是创建并获得目录引用的方法:

public static File getSettingsDirectory() {
    String userHome = System.getProperty("user.home");
    if(userHome == null) {
        throw new IllegalStateException("user.home==null");
    }
    File home = new File(userHome);
    File settingsDirectory = new File(home, ".myappdir");
    if(!settingsDirectory.exists()) {
        if(!settingsDirectory.mkdir()) {
            throw new IllegalStateException(settingsDirectory.toString());
        }
    }
    return settingsDirectory;
}

在类Unix的操作系统中,以点号(“。myappdir”)开头的目录名称将使目录隐藏。在Windows上,它将位于我的文档下方,因此用户除非主动寻找,否则不会看到该目录。

问题回答

如果设置仅由您的应用程序编写(而不是手动编辑),请考虑使用Preferences API

你不应该在一个应用程序的安装目录中存储临时文件。记住,运行该应用程序的用户可能没有向该目录写入的访问权限。将这类东西放置在C:\ Documents and Settings \ 用户名 \ 应用程序数据 \ 应用程序名称文件夹中是最安全的位置(根据需要调整名称)。

然而,我可能会将那种类型的东西存储在注册表中,而非存储在他们的电脑上的文件中。(但这只是我的个人想法。)

通常Java程序员不使用.ini文件,而是使用.properties文件(不同的格式)。如果您使用java.lang.Properties类作为良好的编程包装器,则可以这样做。

虽然你可以通过在class成员的getProtectionDomain().getCodeSource().getLocation()上调用来获取你的jar文件的位置,但我不建议你这么做。

我会将文件写入 System.getProperty("user.home") 目录,即用户的主目录,或者如果它是真正的临时文件,则写入 System.getProperty("java.io.tmpdir")。

这取决于您的ini文件是否需要在正常情况下可读/可写。如果不需要,则可以使用属性文件而不是ini文件,并将其存储在“用户”目录中。

关于查找jar文件,你需要找到已知从jar加载的类的ClassLoader,检查它是否是适当类型的ClassLoader(即是否确实从jar加载),然后从中提取路径。如果您真的需要这样做,我可以找出可以执行此操作的代码。我不一定推荐这样做。

编辑 user.home属性会给你用户目录,你可以安全使用。

使用.properties文件代替INI文件的想法很好。此外,如果您在其中存储了一些敏感数据,可以考虑加密它。请查看:

将此翻译为中文:https://www.owasp.org/index.php/How_to_encrypt_a_properties_file https://www.owasp.org/index.php/How_to_encrypt_a_properties_file

I'm sorry, but you haven't provided any text for me to translate into Chinese. Please provide the text you would like translated.

在Java中加密和解密属性文件值





相关问题
热门标签