Projektdateien zusammengefasst speichern

antimon

Mitglied
Hallo mal wieder,

mich plagt ein organisatorisches Problem, für das ich keine Lösung finde... vielleicht habt Ihr eine?

Mein Java-Programm speichert Projektinformationen ab - derzeit reine Textinformationen, strukturiert durch XML.
Allerdings stoße ich damit sehr schnell an die Grenzen - zum einen würde die Datei mit der Zeit riesig werden, wenn immer mehr Informationen hinzukommen, zum anderen bin ich beschränkt auf Texte, Bilder etc. kann ich damit nicht ohne mir Nachteile ins Haus zu holen, speichern.

Programme wie OpenOffice beispielsweise verwenden ZIP-Dateien, in denen die verschiedensten Informationen abgelegt sind, dieser Ansatz gefällt mir eigentlich ganz gut. Damit könnte ich durch verschiedene Dateien die Inhalte kategorisiere, und verschiedene Formate sind auch kein Problem.

Allerdings habe ich bei meinen Recherchen herausgefunden, dass es nicht möglich ist, ZIP-/JAR-Dateien direkt zu manipulieren.

Welchen Ansatz könnte ich dann verfolgen? Eventuell beim Programmstart die Projektdatei entpacken und beim Beenden wieder zusammenpacken? Falls ja - wo speichert man das Ganze? In einem temporären Verzeichnis im Anwendungsverzeichnis? (ich möchte möglichst betriebssystemunabhängig sein und eine portable Anwendung haben).

Oder gibts es eventuell ganz andere Möglichkeiten, verschiedene Formate in einem Projekt zusammenzufassen? Wie macht Ihr das so?
 
Also wenn ich dich jetzt richtig verstanden habe, hast du ein Programm geschrieben, dass zur Laufzeit unterschiedliche Dateien/Informationen auf die Festplatte schreiben soll. Du möchtest aber weg von XML. Also ich denke der einfachste Weg ist, dein .Jar in einen Ordner zu packen und diesen als .zip auszuliefern.

Da das .Jar in diesem Verzeichnis liegt, sollte es kein Problem sein im Quellcode dieses Verzeichnis dynamisch und somit BS-unabhängig zu ermitteln. Ja und dann würde ich die Informationen dort ablegen. Und bei Bedarf diesen Ordner wieder zippen.

Ich hoffe damit ist dir erstmal geholfen
 
Ähm jein - nicht ganz. Also ich möchte nicht weg von XML, nur hat XML für mich Grenzen - ich kann zwar Zahlen, Texte etc. gut speichern, aber mit Binärdaten wie z.B. Bildern sieht es schlecht aus - die sollten dann doch besser im eigenen Format gespeichert haben.
Oder ich habe eine globale Einstellungsdatei und dann eine zusätzliche Datei, die Einstellungen für ein Plugin beispielsweise speichert - das sind zwei getrennte Dateien wegen der Übersichtlichkeit und Wartbarkeit (ich kann die Plugin-Einstellungen beispielsweise löschen oder in ein anderes Projekt kopieren, ohne die eigentlichen Projekteinstellungen anzutasten).

Es geht also darum, mehrere Dateien zusammenzufassen - als einen Container. Möchte ich das Projekt auf einem anderen PC weiterbearbeiten, brauche ich nur die eine Datei und habe damit alles. Natürlich könnte ich auch alles in ein Verzeichnis packen, aber da sehe ich mehrere Nachteile - beispielsweise können Benutzer die Dateien drin umbenennen/löschen/... und dann funktioniert nichts mehr richtig. Oder es wird ein Ordner verwendet, in dem Dateien vorhanden sind, etc. - mit einem Container umgehe ich dieses Problem. Gebe ich ihm statt .zip oder .jar eine andere Dateiendung (z.B. .prj), wissen die meisten Leute erst recht nicht damit umzugehen - ausserdem habe ich den Vorteil dass ich zumindest unter Windows per Doppelklick die Datei mit meinem Programm öffnen könnte.

Vielleicht hilfts noch grob zu wissen, was gespeichert werden sollte: Es sind einfache Properties bis hin zu Themes mit verschiedenen Grafiken. Was das Programm genau macht kann ich gern auch beschreiben, aber ich denke das langweilt dann doch eher ;)

Danke auf jeden Fall für deine Hilfe, vermutlich ists einfach schon zu spät, als dass ich mich vernünftig ausdrücken könnte ;)
 
Ach ich konnte es gestern nicht einmal mehr lesen. Also gut okay, jetzt wirds langsam ein bissel klarer. Du willst sowas ähnliches wie einen Eclipse Workspace erstellen, den man mit allen Ressourcen stumpf kopieren kann und auf einem anderen Rechner genauso benutzen kann.

Also so gesehen finde ich deine Idee schon sehr gut. Das mit Globaler Einstellungsdatei und Metadateien. In diese schreibste z.B. die Pfade zu den Bild-Datein rein usw.
Aber jetzt seh ich auch dein Problem, du möchtest, dass dieser Ressourcen-Ordner quasi unsichtbar wird für den Endnutzer und deswegen willste das in einen Container hauen. Naja ich habe noch nie versucht etwas aus java raus zu zippen, glaube auch nicht dass das geht. Deswegen würde ich dir empfehlen, doch die variante mit einem versteckten ordner durchzuführen und dann wie bei eclipse in deinem programm eine export-funktion einzubauen. Die alles zusammensammelt..(jetzt wirds fuchsig):D....du aus diesen gesammelten Daten mit dem Java sdk ein jar baust...und dieses iwo ablegst. Im Nachgang nimmst du wieder die erzeugte Datei und nennst sie stumpf in zip um oder eine andere endung. ist ja egal, Winzip wird diese Datei weiterhin öffnen können.

Und fertig haste einen Container erzeugt zum Export. Auf der anderen Seite fügste natürlich noch eine Import Funktion hinzu.
 
Prinzipiell ja - nur bei Eclipse ist der Workspace ja quasi ein Verzeichnis... ich hätte das Ganze gern in eine Datei gepackt. So wie bei OpenOffice die odt-Dateien beispielsweise auch nur ZIP-Dateien sind, in denen Texte, Bilder etc. drin liegen.

Aber dann dürfte es wohl das beste sein, beim Start der Anwendung die Datei in ein temporäres Verzeichnis zu entpacken, die Dateien zu bearbeiten und beim Speichern wieder eine Datei draus zu machen... oder gibts vielleicht noch eine elegantere Lösung?

Exportieren/Importieren möchte ich vermeiden, das soll von Haus aus eine Datei sein...
 
Zurück