在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,您就可以毫无问题地将它们序列化。
属性文件很好,但它们对二进制数据或持久性不灵活。
- StorageException:代码:-13000 HttpResult:0将文件上传到Firebase
- 如何制作我的应用系统
- MediaRecorder:setCamera() – 错误的相机不可用
- 发送复杂的JSON对象
- 在Eclipse上使用Android的原生c ++ – 在stdlib上给出错误但有效
- 致命exception:android.view.WindowManager $ BadTokenException无法添加窗口 – 令牌无效; 你的活动在运行吗?
- Android中Thread.currentThread()。getId()和Process.myTid()之间的区别
- 使用Google Cloud Endpoints的“会话”
- 找出填写pdf文件所需的字段