• 【JAVA学习笔记】个人设定


    作者: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/

  • 相关阅读:
    CF 1114D(538,div2) Flood Fill
    UVA 1640 The Counting Problem
    UVA 11971 Polygon
    UVA 1639 Candy
    CCPC 2019 秦皇岛 Angle Beats
    UVA1153-Keep the Customer Satisfied(贪心)
    UVA1613-K-Graph Oddity(贪心)
    UVA11925-Generating Permutations(贪心)
    UVA11491-Erasing ans Winning(贪心)
    UVA12545-Bits Equalizer(思维)
  • 原文地址:https://www.cnblogs.com/gnuhpc/p/2822272.html
Copyright © 2020-2023  润新知