2008-10-16 6 views

ответ

11

Я надеюсь, что вы прочитали read/write to Windows Registry using Java и затем вы хотите иметь другой фоновый, чем реестр при использовании java.util.Preferences API

Вы можете расширить Preference API, как Bernhard или Croft сделали, как описаны в this article:

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

Примеры расширений через new Preferences can be seen here.

Это лучше, ИМО, чем использовать другой 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 { 
+0

Хорошо, спасибо. Обратите внимание, что вы можете использовать PreferencesFactory для использования с системным свойством Java «java.util.prefs.PreferencesFactory». http://www.onjava.com/pub/a/onjava/synd/2001/10/17/j2se.html?page=2 – Epaga 2008-10-16 13:14:51

2

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

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