天天看點

【JAVA學習筆記】個人設定

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) {

        param2  = args[1];

    else if (args.length == 3) {

        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'");

    // 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");

          ("Got PrefsValue `" + prefs_value + "' from prefs");

      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);

          ("Number of puts since clear is " + (num_puts+1));

    } // switch

    if (export) {

          prefs.exportNode (System.out);

        catch (java.io.IOException ioe) {

          System.err.println (ioe);

  } // ctor

  public static void main (String[] args) {

    new PrefsDemo (args);

  } // main

}   // class PrefsDemoApp

下邊這篇文字更為詳細的介紹了個人偏好設定這個話題:

http://java.sun.com/developer/technicalArticles/releases/preferences/