Java如何使用首选项API存储程序配置?

java.util.prefs软件包中提供的Preferences API可用于存储和检索应用程序配置。主要的阶级是Preferences阶级。使用此类,您可以管理首选项数据,例如存储,检索,删除和清除首选项数据。

首选项是数据的键值对。你可以存储在string,int,boolean和其他基本数据类型。您可以使用该get()方法从首选项节点中检索与键关联的值,并可以使用该方法在首选项节点put()中存储与键关联的值。要从首选项节点中删除与键关联的值,可以使用remove()方法。如果要清除首选项节点中的键,则可以使用该clear()方法。

这些首选项数据的实际存储取决于平台。例如,在Windows操作系统中,它存储在Windows注册表中。您必须知道,该Preferences API并非旨在用于存储应用程序数据,您仅将其用于存储应用程序的配置。

让我们看一个使用Preferences API的例子。

package org.nhooo.example.util;

import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;

public class PreferencesExample {
    public static void main(String[] args) {
        PreferencesExample demo = new PreferencesExample();
        demo.setPreferences();
    }

    private void setPreferences() {
        // 定义一个节点来存储首选项数据。
        Preferences pref = Preferences.userRoot().node(getClass().getName());

        String key1 = "KEY1";
        String key2 = "KEY2";
        String key3 = "KEY3";

        // 读取KEY1的值,如果该值返回一个空字符串
        // 以前没有设置过。
        String key1Value = pref.get(key1, "");
        System.out.println("KEY1: " + key1Value);

        // 读取KEY2的值,如果它不是一个整数
        // 先前设置为返回-1。
        int key2Value = pref.getInt(key2, -1);
        System.out.println("KEY2: " + key2Value);

        // 读取KEY3的值,如果未设置任何值,则返回true
        // 先前。
        boolean key3Value = pref.getBoolean(key3, true);
        System.out.println("KEY3: " + key3Value);

        // 设置上面所有首选项键的值。
        if (key1Value.equals("")) {
            pref.put(key1, "January");
        }
        if (key2Value == -1) {
            pref.putInt(key2, 1000);
        }
        if (key3Value) {
            pref.putBoolean(key3, false);
        }

        printKeys(pref);

        // 从首选项数据中删除KEY1。
        pref.remove(key1);
        printKeys(pref);

        try {
            // 删除该节点的所有首选项数据。
            pref.clear();
        } catch (BackingStoreException e) {
            e.printStackTrace();
        }

        printKeys(pref);
    }

    /**
     * Print Keys in the preferences node.
     * @param pref Preference node.
     */
    private void printKeys(Preferences pref) {
        System.out.println("PreferencesExample.printKeys");
        try {
            String[] keys = pref.keys();
            for (String key : keys) {
                System.out.println("Key = " + key);
            }
        } catch (BackingStoreException e) {
            e.printStackTrace();
        }
        System.out.println("============================");
    }
}

这是运行上面的示例时将获得的输出:

KEY1: 
KEY2: -1
KEY3: true
PreferencesExample.printKeys
Key = KEY1
Key = KEY2
Key = KEY3
============================
PreferencesExample.printKeys
Key = KEY2
Key = KEY3
============================
PreferencesExample.printKeys
============================