作者:
出处:1.简介:
以前你想让程序记住用户自定义的习惯,比如界面字体等,你使用一个配置文件,但是在维护多个用户或出现误拼写时还是力不从心。而java.util.prefs包则提供了便利。在线文档写的非常糟糕,将java.util.prefs这个类描述为“a node in a hierarchical collection of preference data”,还说“there are two separate trees of preference nodes, one for user preferences and one for system preferences.” 这个其实没有那么抽象。 2.使用: 创建Preferences对象的方法是使用静态方法userNodeForPackage()。这个方法要求有一个类对象(通过getClass()方法得到)作为它唯一的参数,系统以便确定某个类是驻留在某个包上的,它返回Preferences对象,这个对象可以从那个包中返回用户设定的偏好信息。由于所有程序一般都使用它们自己的包名,这样references对象间就不会冲突了。userNodeForPackage()方法对每个用户返回不同的Preferences对象,因此同一个程序的不同用户也不会冲突。 偏好信息是以键值对的形式存储的,存储偏好设定使用put()方法,取出偏好设定使用get()方法,使用时需要有一个默认值提供。针对int的putInt方法也可以使用。相似的, * boolean - putBoolean() and getBoolean() * long - putLong() and getLong() * float - putFloat() and getFloat() * double - putDouble() and getDouble()) clear()则清除这个键值对。 3.举例: import java.util.prefs.*; /** * Simple demonstration of the most common usage of the Java * Preferences API using the user and package based storage * node. This app uses the user tree to avoid collisions with * other users and uses the package name, as is conventional, * to avoid collisions with other applications in other packages. * * This is a simple command-line application. It stores only one * key/value pair, in which key is the string "PrefsValue". * * Argument 1 may be either "get", "clear", or "put". * * If "get", the value stored under the key "PrefsValue" is * fetched and displayed. * * If "clear", all prefs items for this package are cleared. * * If "put", the second command-line argument provides the value * to be stored. If the second argument is null, a suitable default * value is used. * * If "get" is requested the first time this application is run * or after a "clear" operation, a suitable default value is * returned. * **/ public class PrefsDemo { // Define constants for the three possible operations. private static final int GET = 1; private static final int CLEAR = 2; private static final int PUT = 3; /** Constructs the PrefsDemo application. **/ public PrefsDemo (String[] args) { // Get the preferences node for this user and this package. Preferences prefs = Preferences.userNodeForPackage (getClass ()); // Decode the command-line arguments. String command = null; String param2 = null; String param3 = null; String newvalue = null; boolean export = false; System.err.println (""); if (args.length == 0) { System.err.println ("No command given, assuming 'get'"); command = "get"; } else if (args.length == 1) { command = args[0]; } else if (args.length == 2) { command = args[0]; param2 = args[1]; } else if (args.length == 3) { command = args[0]; param2 = args[1]; param3 = args[2]; } // Turn the string commands into ints so they can be used // in a switch. int operation; if (command.equals ("get")) { operation = GET; } else if (command.equals ("clear")) { operation = CLEAR; } else if (command.equals ("put")) { operation = PUT; newvalue = param2!=null ? param2 : "you forgot the value, dummy"; } else { System.err.println ("Don't understand command '" + command + "', assuming 'get'"); operation = GET; } // See if the 2nd parameter (for GET and CLEAR) or // 3rd parameter (for PUT) is the string "export". if (operation == GET || operation == CLEAR) { export = "export".equalsIgnoreCase (param2); } else if (operation == PUT) { export = "export".equalsIgnoreCase (param3); } // Do the operation requested by the command-line argument(s). switch (operation) { case CLEAR: System.err.println ("Clearing preferences"); try { prefs.clear (); } catch (BackingStoreException bse) { System.err.println (bse); } break; case GET: String prefs_value = prefs.get ("PrefsValue", "default value"); System.err.println ("Got PrefsValue `" + prefs_value + "' from prefs"); break; case PUT: System.err.println ("Putting `" + newvalue + "' into prefs"); prefs.put ("PrefsValue", newvalue); int num_puts = prefs.getInt ("num_puts", 0); prefs.putInt ("num_puts", num_puts+1); System.err.println ("Number of puts since clear is " + (num_puts+1)); break; } // switch if (export) { try { prefs.exportNode (System.out); } catch (java.io.IOException ioe) { System.err.println (ioe); } catch (BackingStoreException bse) { System.err.println (bse); } } } // ctor public static void main (String[] args) { new PrefsDemo (args); } // main } // class PrefsDemoApp 下边这篇文字更为详细的介绍了个人偏好设定这个话题: http://java.sun.com/developer/technicalArticles/releases/preferences/
作者:
出处: