在Java中进行设置文件的最简单方法是什么?

显然,我想避免将硬编码路径等应用到我的应用程序中,因此,我想创建一个设置文件来存储简单的东西,如字符串等。 最简单的方法是什么? 我正在思考Cocoa如何使用对象持久性的方法,但我似乎无法找到任何等价物。

您可以使用使用java.util.Properties类操作的属性文件。

基于你说的最简单的事实:

请记住,我没有做任何exception处理。 您需要为Streams执行此操作。

// Save Settings Properties saveProps = new Properties(); saveProps.setProperty("path1", "/somethingpath1"); saveProps.setProperty("path2", "/somethingpath2"); saveProps.storeToXML(new FileOutputStream("settings.xml"), ""); // Load Settings Properties loadProps = new Properties(); loadProps.loadFromXML(new FileInputStream("settings.xml")); String path1 = loadProps.getProperty("path1"); String path2 = loadProps.getProperty("path2"); 

这取决于您希望如何配置应用程序以及您希望配置应用程序的人员。 如果你想使用系统的本机配置机制(例如Mac OS X上〜/ Library中的PLIST文件,Gnome上的gconf,Windows上的系统注册表),那么java.util.prefs.Preferences是正确而简单的处理方式设置/首选项。 您仍然可能希望在Preferences之上创建自己的类,其中包含键的命名常量以及这些设置的默认值,以及可能的辅助方法来检索它们。 以下是如何使用它的示例:

 // Class to wrap some settings public class AnimationSettings { private static final String VELOCITY_KEY = "velocity"; private static final double VELOCITY_DEFAULT = 5.0; public static double getVelocity() { return getPrefs().getDouble(VELOCITY_KEY, VELOCITY_DEFAULT); } public static void setVelocity(int velocity) { getPrefs().putDouble(VELOCITY_KEY, velocity); } public static void sync() { getPrefs().sync(); } private static Preferences getPrefs() { if (preferences_ == null) { preferences_ = Preferences.userNodeForPackage(AnimationSettings.class); } return preferences_; } private static Preferences preferences_ = null; }; // Elsewhere in the application: //... double velocity = AnimationSettings.getVelocity(); // ... 

也就是说,Preferences类不会为您提供跨平台配置应用程序的单一方法,并且它不一定会为您提供配置文件。 为此,XML / * .properties文件也是一些可能的解决方案,正如其他一些回答者所建议的那样。 但是,使用XML和属性文件的一个缺点是,您必须处理它们应该去哪里,如何查找它们,是否要让多个这样的文件覆盖另一个(例如系统设置和用户设置) ,如果文件不在那里该怎么办,等等。优惠很好地处理这些事情。

通常有两种不同的方式。 一种语言特定和一般。 存储设置的一般方法是属性文件,可以由Properties类读取。 请看这个 。

存储属性的特定于语言的方法是为每种语言提供属性文件,并使用默认属性文件进行回退。 您可以使用Resource类并提供区域设置来阅读这些内容。 请看这个 。

如果这是基于Web的应用程序,您可以将它们作为环境变量(或自定义属性)的一部分添加到app server控制台/文件中。

如果它是一个独立的应用程序,一个简单的属性文件就足够了。

如果要构建Web应用程序,请使用Spring 3.0。 您可以在web.xml和Dispatcher-servlet.xml文件中定义bean。

通常,像Jetty和Tomcat这样的Web容器允许您定义环境变量。 这具有允许这些变量从服务器更改为服务器而无需重新编译或重建WAR文件的额外好处。

我通常使用这种方法,因此我可以从开发服务器部署到登台服务器和生产服务器,而无需经常使用代码或WAR文件。

您是否考虑过基本对象序列化并将结果写入文件? 只要您的首选项在首选项对象的图形中实现Serializable,您就可以毫无问题地将它们序列化。

属性文件很好,但它们对二进制数据或持久性不灵活。