【JAVA學習筆記】個人設定

來源:互聯網
上載者:User

作者:gnuhpc
出處:http://www.cnblogs.com/gnuhpc/

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/

 

作者:gnuhpc
出處:http://www.cnblogs.com/gnuhpc/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.