×
Traktatov.net » Философия Java » Читать онлайн
Страница 340 из 395 Настройки

//• io/PreferencesDemo.java

import java util prefs *;

import static net mindview.util Print *,

public class PreferencesDemo {

public static void main(String[] args) throws Exception { Preferences prefs = Preferences

.userNodeForPackage(PreferencesDemo class). prefs.put("Location", "Oz"); prefs put("Footwear", "Ruby Slippers"), prefs.putlntC"Companions". 4); prefs.putBooleanC'Are there witches?", true), int usageCount = prefs.getlntC'UsageCount". 0), usageCount++;

prefs putlntC"UsageCount". usageCount).

for(String key : prefs.keys())

print(key + ": "+ prefs.get(key. null));

// Всегда необходимо указывать значение по умолчанию:

print("How many companions does Dorothy have? " +

prefs.getInt("Companions". 0));

}

} /* Output: Location: Oz Footwear. Ruby Slippers Companions: 4 Are there witches?: true UsageCount- 53

How many companions does Dorothy have? 4 *///-

Здесь используется метод userNodeForPackage(), но с тем же успехом можно было бы заменить его методом systemNodeForPackage(), это дело вкуса. Предполагается, что префикс user используется для хранения индивидуальных предпочтений пользователя, a system — для хранения информации общего плана о настройках установки. Так как метод main() статический, для идентификации узла применен класс PreferencesDemo.class, хотя в нестатических методах обычно вызывается метод getClass(). Использовать текущий класс для идентификации узла не обязательно, но чаще всего именно так и поступают.

Созданный узел используется для хранения или считывания информации. В данном примере в узел помещаются различные данные, после вызывается метод keys(). Последний возвращает массив строк String[], что может быть непривычно, если вы привыкли использовать метод keys() в коллекциях. Обратите внимание на второй аргумент метода get(). Это значение по умолчанию, которое будет возвращено, если для данного ключа не будет найдено значение. При переборе множества ключей мы знаем, что каждому из них сопоставлено значение, поэтому передача null по умолчанию безопасна, но обычно используется именованный ключ:

prefs.getInt("Companions ". 0)),

В таких ситуациях стоит обзавестись имеющим смысл значением по умолчанию. В качестве характерного средства выражения часто выступает следующего рода конструкция:

int usageCount = prefs.getlntC"UsageCount", 0);

usageCount++;

prefs.putlnt("UsageCount". usageCount);

В этом случае при первом запуске программы значение переменной usage-Count будет нулем, а при последующих запусках оно должно измениться.

Запустив программу PreferencesDemo.java, вы увидите, что значение usage-Count действительно увеличивается при каждом запуске программы, но где же хранятся данные? Никакие локальные файлы после запуска программы не создаются. Система предпочтений привлекает для хранения данных системные ресурсы, а конкретная реализация зависит от операционной системы. Например, в Windows используется реестр (поскольку он и так представляет собой иерархию узлов с набором пар «ключ-значение»). С точки зрения программиста, реализация — это несущественно: информация сохраняется «сама собой», и вам не приходится беспокоиться о том, как это работает на различных системах.