Java 中保存程序设置的不同方式
Different ways of saving program settings in Java
到目前为止,我已经看到我可以通过这些来保存它们:
- 首选项 class - 我喜欢它,但它需要 windows 中的管理员权限才能进行注册表编辑
- 属性class - 这似乎对存储数据很有用。我还看到我可以像这样从 jar 加载文件:
inputStream = Main.class.getResourceAsStream("config.properties");
但是 - 一旦我加载它(如果我错了请纠正我)不能编辑它。无法以编程方式编辑 jar 中的文本文件。相反,我应该使用以下方法将它保存到与 .jar 相同的目录中:
File newFile = new File("config.properties");
OutputStream os = new FileOutputStream(newFile);
properties.store(os, "Properties File");
只要文件在名为 Main
的 class 所在的位置即可。
- 第三种方式与第二种方式基本相同,但是是从硬编码默认值加载而不是从 txt 文件加载。
如果您知道另一种在程序中加载设置的方法,请告诉我。请澄清这一点 - 基本上,用户不会在他的 jar 旁边得到一个讨厌的文件来保存属性的唯一方法是我使用首选项。当然考虑到我们不能有绝对路径看到不同的操作系统将是一个问题。
Apache 有一个很好的公共配置库来处理配置:
https://commons.apache.org/proper/commons-configuration/
如果您最终需要更多的配置,或者如果您要维护多个应用程序并想要一种通用的方式来处理不同类型的配置文件,那么这会很好。
但是,如果您要寻找的只是在某处为每个用户存储几个属性,我会使用属性 class 并将每个用户的数据存储在他们 user.home 下的文件中名为 您的应用程序名称 .properties 的目录。这样一个用户的数据就不会与另一个用户的数据发生冲突,并且用户在 user.home 中拥有写入权限的可能性非常大。 User.home 肯定比 windows 在更多的系统中可用 - 它是为 linux/unix 环境设置的,因此也将涵盖 Mac OSX。
如果您还没有数据库,我不会介绍一个只是为了存储一些用户首选项的数据库。
regedit.exe
不需要管理员权限,只要用户正在编辑 his/her 自己的 Java 首选项。
- 如果您的
Properties
文件包含配置,请将它们保存在 jars 之外。最好在当前工作目录或 System.getProperty("user.home")
.
- Apache 公共配置:https://commons.apache.org/proper/commons-configuration/
到目前为止,我已经看到我可以通过这些来保存它们:
- 首选项 class - 我喜欢它,但它需要 windows 中的管理员权限才能进行注册表编辑
- 属性class - 这似乎对存储数据很有用。我还看到我可以像这样从 jar 加载文件:
inputStream = Main.class.getResourceAsStream("config.properties");
但是 - 一旦我加载它(如果我错了请纠正我)不能编辑它。无法以编程方式编辑 jar 中的文本文件。相反,我应该使用以下方法将它保存到与 .jar 相同的目录中:
File newFile = new File("config.properties");
OutputStream os = new FileOutputStream(newFile);
properties.store(os, "Properties File");
只要文件在名为 Main
的 class 所在的位置即可。
- 第三种方式与第二种方式基本相同,但是是从硬编码默认值加载而不是从 txt 文件加载。
如果您知道另一种在程序中加载设置的方法,请告诉我。请澄清这一点 - 基本上,用户不会在他的 jar 旁边得到一个讨厌的文件来保存属性的唯一方法是我使用首选项。当然考虑到我们不能有绝对路径看到不同的操作系统将是一个问题。
Apache 有一个很好的公共配置库来处理配置: https://commons.apache.org/proper/commons-configuration/ 如果您最终需要更多的配置,或者如果您要维护多个应用程序并想要一种通用的方式来处理不同类型的配置文件,那么这会很好。
但是,如果您要寻找的只是在某处为每个用户存储几个属性,我会使用属性 class 并将每个用户的数据存储在他们 user.home 下的文件中名为 您的应用程序名称 .properties 的目录。这样一个用户的数据就不会与另一个用户的数据发生冲突,并且用户在 user.home 中拥有写入权限的可能性非常大。 User.home 肯定比 windows 在更多的系统中可用 - 它是为 linux/unix 环境设置的,因此也将涵盖 Mac OSX。
如果您还没有数据库,我不会介绍一个只是为了存储一些用户首选项的数据库。
regedit.exe
不需要管理员权限,只要用户正在编辑 his/her 自己的 Java 首选项。- 如果您的
Properties
文件包含配置,请将它们保存在 jars 之外。最好在当前工作目录或System.getProperty("user.home")
. - Apache 公共配置:https://commons.apache.org/proper/commons-configuration/