Hallo zusammen
Ich schreibe im Moment gerade ein Adressbuch und es funktioniert eigentlich schon recht gut. Das einzige Problem ist, dass ich mir noch nicht sicher bin, wie ich die Daten speichern soll. Im Moment verwende ich die Methoden aus diesen Tutorial: http://code.makery.ch/library/javafx-8-tutorial/part5/
Dort werden die Daten als xml datei gespeichert und geladen und die Methoden dazu sehen so aus:
Ich habe mein Programm so geschrieben, dass bei jeder Änderung (Eintrag hinzufügen, löschen) die Änderungen automatisch gespeichert werden.
Mit der Methode oben wird dann aber immer die komplette arraylist in die xml Datei geschrieben und nicht nur die vorgenommenen Änderungen. Bei einigen Einträgen wird dies ja kein Problem sein, aber ich denke mir, wenn mal ein paar tausend Kontakte in der Liste stehen, ist diese Methode nicht gerade im Sinne des Erfinders. Was denkt ihr dazu? Was würdet ihr empfehlen?
Beim Laden werden alle Daten in die Arraylist geladen. Meine Arraylist bestehlt aus etwa 30 Objekten, fast alles Strings. Ich meine mal gelesen zu haben, dass ein Objekt etwa 4 Byte Speicher benötigt. Dies wären dann bei tausend Eintragen: 1000 * 30 * 4 Byte = 120kb. Das ist ja eigentlich sehr wenig, wenn das mit den 4 Byte ungefähr stimmt. Hier sehe ich eigentlich keine Probleme, aber dass bei einer Änderung immer die komplette Datei neu geschrieben wird finde ich doch etwas unschön.
Für Tipps wäre ich euch sehr dankbar.
LG
Ich schreibe im Moment gerade ein Adressbuch und es funktioniert eigentlich schon recht gut. Das einzige Problem ist, dass ich mir noch nicht sicher bin, wie ich die Daten speichern soll. Im Moment verwende ich die Methoden aus diesen Tutorial: http://code.makery.ch/library/javafx-8-tutorial/part5/
Dort werden die Daten als xml datei gespeichert und geladen und die Methoden dazu sehen so aus:
Java:
public void loadPersonDataFromFile(File file) {
try {
JAXBContext context = JAXBContext
.newInstance(PersonListWrapper.class);
Unmarshaller um = context.createUnmarshaller();
// Reading XML from the file and unmarshalling.
PersonListWrapper wrapper = (PersonListWrapper) um.unmarshal(file);
personData.clear();
personData.addAll(wrapper.getPersons());
// Save the file path to the registry.
setPersonFilePath(file);
} catch (Exception e) { // catches ANY exception
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Could not load data");
alert.setContentText("Could not load data from file:\n" + file.getPath());
alert.showAndWait();
}
}
public void savePersonDataToFile(File file) {
try {
JAXBContext context = JAXBContext
.newInstance(PersonListWrapper.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// Wrapping our person data.
PersonListWrapper wrapper = new PersonListWrapper();
wrapper.setPersons(personData);
// Marshalling and saving XML to the file.
m.marshal(wrapper, file);
// Save the file path to the registry.
setPersonFilePath(file);
} catch (Exception e) { // catches ANY exception
Alert alert = new Alert(AlertType.ERROR);
alert.setTitle("Error");
alert.setHeaderText("Could not save data");
alert.setContentText("Could not save data to file:\n" + file.getPath());
alert.showAndWait();
}
}
Ich habe mein Programm so geschrieben, dass bei jeder Änderung (Eintrag hinzufügen, löschen) die Änderungen automatisch gespeichert werden.
Mit der Methode oben wird dann aber immer die komplette arraylist in die xml Datei geschrieben und nicht nur die vorgenommenen Änderungen. Bei einigen Einträgen wird dies ja kein Problem sein, aber ich denke mir, wenn mal ein paar tausend Kontakte in der Liste stehen, ist diese Methode nicht gerade im Sinne des Erfinders. Was denkt ihr dazu? Was würdet ihr empfehlen?
Beim Laden werden alle Daten in die Arraylist geladen. Meine Arraylist bestehlt aus etwa 30 Objekten, fast alles Strings. Ich meine mal gelesen zu haben, dass ein Objekt etwa 4 Byte Speicher benötigt. Dies wären dann bei tausend Eintragen: 1000 * 30 * 4 Byte = 120kb. Das ist ja eigentlich sehr wenig, wenn das mit den 4 Byte ungefähr stimmt. Hier sehe ich eigentlich keine Probleme, aber dass bei einer Änderung immer die komplette Datei neu geschrieben wird finde ich doch etwas unschön.
Für Tipps wäre ich euch sehr dankbar.
LG