Wie kann man mit Properties alle Keys aus der .properties-Datei löschen, die nicht dazugehören sollen (die, die z. B. manuell in die Datei geschrieben wurden)?
Mit:
if (!prop.containsKey("language")) {
prop.setProperty("language", "eng");
}
if (!prop.containsKey("design")) {
prop.setProperty("design", "default");
}
erstelle ich alle Keys, die nicht (mehr) vorhanden sind.
Ich hatte mir eine Abfrage vorgestellt, die überprüft, dass wenn ein Key vorhanden ist, der nicht dazugehört, dass der dann rausgelöscht wird.
Falsch geschrieben etwa so:
if(NichtDazuGehöhrigerKey.containsInDerPropertiesDatei){
NichtDazuGehöhrigerKey.delete();
}
Komischer Code, ich weiß :)
1 Antwort
Vorweg: Wäre dies denn relevant, ob der Nutzer weitere Daten hineinschreibt oder nicht? Natürlich besteht das Risiko, dass der Nutzer mit Bearbeitungen der Datei das Programm (oder nur einzelne Programmbereiche) unbrauchbar macht, doch würde ich so etwas als Fremdverschulden werten.
Dein Programm sollte sich allerdings nicht an (validen) Schlüsselwertpaaren stören, die vom Nutzer erdacht wurden. Es kennt doch sein eigenes Set und liest auch nur dieses aus?
Um nun aber deine Frage zu beantworten: Lies die Datei einmal komplett aus und lege sie danach neu an. Da du nur die Schlüsselwertpaare liest und schreibst, die du kennst, werden auch nur die in der neuen Datei landen.
Wenn man sich auf das Data-Hiding-Prinzip beruft, wäre es passender, die Daten erst gar nicht in einem menschenlesbaren Format abzuspeichern. Das Risiko von Manipulation bleibt bestehen, doch es ist ein deutlicheres Zeichen, dass es sich nicht um Daten handelt, die von außen angefasst werden sollen.
Ja, das Programm würde ohne Probleme weiterlaufen und wenn mittendrin oder irgendwann anders ein Key umbenannt wird, wird dieser einfach neu erstellt und der alte ignoriert. Ich wollte es einfach aus Interesse ausprobieren und dem Programm ein etwas besseres Schutzschild verpassen. Einfach nur so :D