Ich verwende java.util.prefs.Preferences für die Anwendungspräferenzen. Und ich muss diese Einstellungen manuell bearbeiten können. Ist es möglich, es in der Datei statt in der Windows-Registrierung zu speichern? Oder sollte ich einen anderen Mechanismus anstelle von java.util.prefs.Preferences verwenden?Wie java.util.prefs.Preferences in Datei speichern?
Antwort
Wenn Sie die Einstellungen API fortsetzen wollen, sondern in eine Datei zu schreiben, müssen Sie einen neuen PreferencesFactory, wie in this SO post beschrieben.
Es wird in einem anderen Beitrag erklärt, here
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("foo.properties");
prop.load(in);
in.close()
Entschuldigung - Es ist nicht das gleiche. [Vergleichen Einstellungen API zu anderen Mechanismen] (http://docs.oracle.com/javase/1.5.0/docs/guide/preferences/index.html#prefs-other). In Windows dort Es gibt zwei Orte, an denen Präferenzen platziert werden könnten: Registry oder% APPDATA% Fe in QSettings (Qt Framework) Ich könnte zwischen diesen beiden Optionen wählen ... – denys
Entschuldigung, ich habe es falsch verstanden, was ist das? Ich konnte es nicht testen, aber es scheint wh wonach du suchst. http://www.davidc.net/programming/java/java-preferences-using-file-backing-store –
Viel besser. Danke, @MEK. – denys
Sie werden die folgenden zwei Verfahren verwenden wollen:
Preferences.exportSubtree(OutputStream os)
und
Preferences.importPreferences(InputStream is)
Ich glaube, Sie Eigenschaftsdateien verwenden können, statt. Sie sind im Dateisystem gespeichert. Sie können den gewünschten Pfad definieren. Und Sie können es von Hand bearbeiten. Weitere Informationen finden Sie unter this question.
sollten Dieser Code hilft Ihnen [http://java.sun.com/developer/technicalArticles/releases/preferences/]:
public class PrefSave {
private static final String PACKAGE = "/pl/test";
public static void main(String[] args) {
doThings(Preferences.systemRoot().node(PACKAGE));
doThings(Preferences.userRoot().node(PACKAGE));
}
public static void doThings(Preferences prefs) {
prefs.putBoolean("Key0", false);
prefs.put("Key1", "Value1");
prefs.putInt("Key2", 2);
Preferences grandparentPrefs = prefs.parent().parent();
grandparentPrefs.putDouble("ParentKey0", Math.E);
grandparentPrefs.putFloat("ParentKey1", (float) Math.PI);
grandparentPrefs.putLong("ParentKey2", Long.MAX_VALUE);
String fileNamePrefix = "System";
if (prefs.isUserNode()) {
fileNamePrefix = "User";
}
try {
OutputStream osTree = new BufferedOutputStream(
new FileOutputStream(fileNamePrefix + "Tree.xml"));
grandparentPrefs.exportSubtree(osTree);
osTree.close();
OutputStream osNode = new BufferedOutputStream(
new FileOutputStream(fileNamePrefix + "Node.xml"));
grandparentPrefs.exportNode(osNode);
osNode.close();
} catch (IOException ioEx) {
// ignore
} catch (BackingStoreException bsEx) {
// ignore too
}
}
Vor einiger Zeit hatte ich mit einer Implementierung der kommen Präferenzklasse, die Einstellungen von der Registrierung liest, aber nicht in die Registrierung schreibt. Ich habe eine ReadOnlyPreferences-Klasse von AbstractPreferences abgeleitet, um dies zu erreichen. Später benötigte ich genau diese Funktionalität, die Sie benötigen, um zu/von Dateien zu gehen. Ich habe gerade meine ReadOnlyPreferences-Klasse erweitert, um sync() und flush() zu überschreiben, um die Datei synchron zu halten. Der coole Teil dazu würde genau die gleiche Logik verwenden, um Standardwerte auf die Werte anzuwenden, genau wie die übliche Verwendung der Präferenzen, da in der Registrierung tatsächlich nichts zum Lesen existierte. Ich habe die Datei synchron gehalten, indem ich exportSubtree() und importPreferences() von der Basisklasse verwendet habe, um all das schwere Heben für mich zu erledigen.
Es tut mir leid, dass ich den Code nicht posten kann, da ich ihn nicht besitze, aber ich habe die verschlüsselten Einstellungen verwendet, die Sie unter dem folgenden Link als Ausgangspunkt finden können. Das habe ich gemacht und ich brauchte ungefähr eine Stunde, um es auf genau das zurückzuführen, was ich brauchte und hauptsächlich Code wegwarf, was viel einfacher ist, als Code zu schreiben! Es wird auch in Dr. Dobbs unter dem folgenden Link veröffentlicht, wenn Sie nicht auf den ersten klicken möchten. Ich habe nie einen einfachen Platz auf dem Dobbs-Artikel gesehen, um die gesamte Quelle herunterzuladen. Egal, der Artikel ist der beste, den ich gesehen habe, um die Vorlieben zu erweitern.
http://www.panix.com/~mito/articles/#ep
http://www.drdobbs.com/security/encrypted-preferences-in-java/184416587?pgno=4
die folgende Klasse Versuchen Sie, die Sie einige einfache put()
und get()
Funktionen mit einer lokalen configuration.xml
Datei verwenden.
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;
public class SimpleProperties
{
private String propertiesFilePath;
private Properties properties;
public SimpleProperties() throws InvalidPropertiesFormatException, IOException
{
propertiesFilePath = "configuration.xml";
properties = new Properties();
try
{
properties.loadFromXML(new FileInputStream(propertiesFilePath));
} catch (InvalidPropertiesFormatException e)
{
}
}
public void put(String key, String value) throws FileNotFoundException, IOException
{
properties.setProperty(key, value);
store();
}
public String get(String key)
{
return properties.getProperty(key);
}
private void store() throws FileNotFoundException, IOException
{
String commentText = "Program parameters";
properties.storeToXML(new FileOutputStream(propertiesFilePath), commentText);
}
}
- 1. Verwendung von java.util.prefs.Preferences in Jython
- 2. Typesafe-Konfiguration laden von java.util.prefs.Preferences
- 3. Stream in Datei speichern
- 4. BitmapImage in Datei speichern
- 5. Bild in Datei speichern
- 6. Wie RSS in XML-Datei speichern Java
- 7. Wie cURL Antwort in eine Datei speichern?
- 8. Wie Sie Matplotlib.pyplot.loglog in Datei speichern?
- 9. Wie speichern Trace info in eine Datei
- 10. Wie speichern Xlsxwriter-Datei in bestimmten Pfad?
- 11. Wie speichern Sie Anwendungseinstellungen in Datei?
- 12. Wie Pandas Kreisdiagramm in eine Datei speichern?
- 13. Speichern Byte-Array in Datei
- 14. Aktivität in PDF-Datei speichern
- 15. Tensorflow-Modell in Datei speichern
- 16. Speichern Vaadin7 StreamResource in Datei
- 17. TCPDF Datei in Ordner speichern?
- 18. HTML-Quellcode in Datei speichern
- 19. Speichern in Datei mit Sonderzeichen
- 20. Speichern von HTML-Datei hinzufügen in Datei
- 21. Druckanweisung in neue Datei speichern
- 22. Speichern großer Objekte in Datei
- 23. OpenCV Video in Datei speichern
- 24. Bankverbindung in vCard-Datei speichern
- 25. Speichern UIView-Darstellung in Datei
- 26. FileSystemInfo-Array in Datei speichern
- 27. Eine Datei in Java speichern
- 28. Datei speichern Dialog in Tkinter
- 29. speichern Remote-Datei
- 30. Speichern Writeablebitmap Datei WPF
[java.util.Properties] (http://download.oracle.com/javase/tutorial/essential/environment/properties.html) vielleicht? Es ist jedoch weniger feinkörnig als die Voreinstellungen. – BalusC
Ich vermute, Sie haben noch nicht auf [Javadoc] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/prefs/Preferences.html) zurückgegriffen. Tun Sie es und sehen Sie, ob Sie noch etwas zu fragen haben. –
@MarkoTopolnik Sie meinten "Diese Daten werden dauerhaft in einem implementierungsabhängigen Backing Store gespeichert.Typische Implementierungen umfassen flache Dateien, betriebssystemspezifische Register, Verzeichnisserver und SQL-Datenbanken. ** Der Benutzer dieser Klasse muss sich nicht um Details des Backing Stores kümmern. ** "??? – denys