Есть ли способ использовать java.util.Preferences в Windows без использования реестра в качестве бэкэнда?

StackOverflow https://stackoverflow.com/questions/208231

Вопрос

Я хочу использовать API java.util.Preferences, но не хочу, чтобы моя программа пыталась читать или записывать в реестр Windows.Как бы мне это сделать?

Это было полезно?

Решение

Я надеюсь, что вы прочитали чтение/запись в реестр Windows с использованием Java и тогда вы захотите иметь другую серверную часть, кроме реестра, при использовании java.util.Preferences API

Вы можете продлить Preference API, нравиться Бернхард или Крофт сделал, как описано в Эта статья:

Поскольку API настроек является нейтральным к серверной части, вам не нужно заботиться о том, хранятся ли данные в файлах, таблицах базы данных или в хранилище, специфичном для платформы, таком как реестр Windows.

Примеры расширений через новый Preferences можно увидеть здесь.

ИМО, это лучше, чем использовать другой API.


Например, поиск классов, расширяющих java.util.prefs.AbstractPreferences:

  • Вы можете использовать хранилище предпочтений, поддерживаемое XML-файлом:

de.unika.ipd.grgen.util.MyPreferences

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;

/**
 * Own implementation of the Java preferences API, that does not use
 * a "OS backing store" but relies on importing and exporting the
 * preferences via xml files.
 * Also, If a preference is got, but was not in the tree, it is entered.
 */
public class MyPreferences extends AbstractPreferences {

    private Map<String, String> prefs = new HashMap<String, String>();
    private Map<String, AbstractPreferences> children = new HashMap<String, AbstractPreferences>();

  public MyPreferences(MyPreferences parent, String name) {
    super(parent, name);
  }

  /**
   * @see java.util.prefs.AbstractPreferences#putSpi(java.lang.String, java.lang.String)
   */
  protected void putSpi(String key, String value) {
    prefs.put(key, value);
  }

  • Или вы можете сохранить эти настройки в LDAP:

de.tarent.ldap.prefs.LDAPSystemPreferences

import java.util.prefs.AbstractPreferences;
import java.util.prefs.BackingStoreException;

import javax.naming.NamingException;
import javax.naming.directory.Attributes;

import de.tarent.ldap.LDAPException;
import de.tarent.ldap.LDAPManager;

/**
 * @author kirchner
 * 
 * Preferences im LDAP
 */
public class LDAPSystemPreferences extends AbstractPreferences {
    LDAPManager     ldm         = null;
    Properties      properties  = new Properties();
    //Map für key/value der Preferences
    Map             cache       = new HashMap();
    //Map für timestamp der Preferences
    Map             timestamp   = new HashMap();
    private Boolean deleted     = Boolean.FALSE;

  • Или вы можете использовать простой файл свойств:

com.adito.boot.PropertyPreferences:

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


/**
 * A simple implementation for the preferences API. That stores preferences
 * in propery files. We do not have to worry about sharing the preferencese 
 * with other JVM instance so there is no need for any kind of synchronising
 * or locking.
 */
public class PropertyPreferences extends AbstractPreferences {

Другие советы

Всегда можно расширить java.util.prefs.AbstractPreferences.

Альтернативой может быть использование Пакет конфигурации Apache Commons позволяет вам читать и записывать данные конфигурации из/в разные источники.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top