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

但如果你知道更好的解决方案,我希望听到其中的一些。

编辑:我正在使用mac,我想在Windows中运行相同的应用程序。我可以在System.getProperty(<!> quot; user.home <!> quot;)目录中写一些东西,但是如果用户决定删除该应用程序,我想保持系统清洁。没有更好的方法来存储设置文件,例如与应用程序在同一目录中?

有帮助吗?

解决方案

您可以使用ClassLoader找到您的应用程序目录。请参阅: Java:查找应用程序目录。使用 .properties 文件而不是 .INI 文件 - 您可以通过属性类。

正如其他人所说,您不应将用户设置写入应用程序目录。如果用户没有对应用程序目录的写访问权,该怎么办?如果您的应用程序同时被同一系统上的多个用户使用怎么办?即使在Windows上,这些情况都不常见。

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

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

/home/user/.eclipse
C:\Documents and Settings\User\.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的操作系统上,使用句点(<!> quot; .myappdir <!>“;)启动目录名将使目录隐藏。在Windows上,它将位于我的文档下面,因此除非用户查找,否则用户将看不到该目录。

其他提示

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

您不应将临时文件存储在应用程序的安装目录中。请记住,运行应用程序的用户可能没有该目录的写入权限。放置这类东西的最安全的地方是在C:\ Documents and Settings \ username \ Application Data \ ApplicationName文件夹中(根据需要调整名称)。

但是,我说,我可能会在注册表中存储这种类型的东西,而不是在他们的计算机上存储文件。 (但是,那只是我。)

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

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

我会将文件写入System.getProperty(<!> quot; user.home <!> quot;)目录 - 用户的主目录,或者如果它是真正临时的,则System.getProperty(<! >“java.io.tmpdir <!>”;)

这取决于你的ini在正常情况下是否需要人类可读/可写。如果没有,您可以使用属性文件而不是ini文件,并将其存储在<!> quot; user <!>中; 。目录

至于找到jar文件,你必须找到已知从jar加载的类的ClassLoader,检查它是否是合适的ClassLoader类型(即它是真的已经从jar中加载),你可以从中提取路径。如果这真的是你想要的话,我可能会挖出代码来做这件事。我不一定会推荐它。

编辑 user.home属性将为您提供可以安全使用的用户目录。

使用.properties文件而不是INI文件的想法很好。此外,如果您在其中存储一些敏感数据,您可以考虑加密它。看看这个:

https://www.owasp.org/index.php/How_to_encrypt_a_properties_file

或者这个:

加密和解密java中的属性文件值

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top