• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

[Java] Daten in der Programmdatei speichern

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
Hi Leute,

ich schreibe gerade in Java an einem kleinen Programm, welches ich immer mal zwischendurch ausführen möchte.
Ich möchte idealerweise eine Datei haben (die auszuführende .jar) und keine weiteren Ordner oder so. Ich starte das Programm, gebe irgendetwas ein, das in einer (meistens neuen) Datei gespeichert wird und dann schließe ich das Programm wieder. Die gespeicherten Daten, werde ich in einem Ordner verschlüsselt und komprimiert speichern.

Nun ist mein Wunsch, dass ich am Ende ein einzelnes Icon habe, welches ich anklicke, durch welches das Programm startet. Die Dateien sollen in dieser Datei gespeichert werden. So dass ich nur eine "wachsende" Datei habe ohne Ordner und so weiter.
Ich möchte das Programm ungern "installieren" müssen oder halt die Dateien extern speichern.
Allerdings habe ich etwas davon gelesen, dass die .jar Datei beim Ausführen gesperrt ist.

Gibt es da eine Möglichkeit das zu machen, oder muss ich damit leben, dass ich den Ordner und meine ausführbare Datei habe?
 

Rakorium-M

NGBler

Registriert
14 Juli 2013
Beiträge
413
Hallo,
was genau spricht eigentlich gegen eine Daten-Datei (die auch gerne im gleichen Ordner liegen darf)? Damit musst du das Programm noch lange nicht installieren, und kannst das auch bspw. von einem USB-Stick aus starten. Das wäre zumindest der übliche Weg.

Google (bzw. StackOverflow) waren sich nicht ganz einig, ob die Jar-Datei während der Ausführung gesperrt ist oder nicht, das könnte evtl. auch vom Betriebssystem (und der JRE) abhängen. Im Zweifelsfall einfach mal ausprobieren. Evtl. könnte man da aber was tricksen, indem man die Daten in eine neue Jar-Datei schreibt, und die Alte nach Programmende gegen die neue Jar austauscht.

Daten in die Jar zu bekommen ist nicht weiter schwer. Eine Jar ist auch nur ein Zip-Archiv mit ein paar speziellen Dateien drin, Packages werden dabei durch Ordner repräsentiert. Auf die Daten kannst du mit der Methode "getResourceAsStream()" oder ähnlichen zugreifen:
[src=java]public class ResourceManager {
public static InputStream getResource(String name){
return ResourceManager.class.getResourceAsStream(name);
}
}[/src]Die Klasse einfach in den gleichen Ordner wie die Daten werfen.
 

BurnerR

Bot #0384479

Registriert
20 Juli 2013
Beiträge
5.507
Evtl. könnte man da aber was tricksen, indem man die Daten in eine neue Jar-Datei schreibt, und die Alte nach Programmende gegen die neue Jar austauscht.
Das klingt aber ganz schmutzig, ich denke man kann sich nicht dagegen absichern im Fehlerfall dann zwei Jar-Dateien zu haben.
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
  • Thread Starter Thread Starter
  • #4
was genau spricht eigentlich gegen eine Daten-Datei (die auch gerne im gleichen Ordner liegen darf)?
An sich spricht nichts dagegen, doch ich würde gerne halt ein "Icon" haben, welches auch alle Daten enthält. Eine einzige Datei (also eine Datendatei) zu haben wäre etwas... schwierig. Ich speichere nämlich relativ viele Daten pro Datensatz mit auch teilweise sehr langen Texten usw. Ich versuche mir gleichzeitig die Möglichkeit zu bewahren die Datensätze nach "Dateinamen" anzusprechen, ohne die Dateinamen (bzw. dann die entsprechenden Datensatz-IDs) vollständig in ein Array zu speichern. Die Datendatei könnte man zwar auch als Archiv zusammenfassen, doch dann dachte ich mir halt, dass wenn ich doch eh schon ein Archiv habe, dieses mit dem Programmarchiv zusammenfassen kann.

Nach weiterer Google-Recherche scheint das allerdings relativ unwahrscheinlich zu sein, dass ein derartiges Vorgehen klappt. Ich schreibe daher erstmal das Programm mit einigen Ordnern zum Speichern der Daten und werde mich dann später darum kümmern, diese Speicherplatz-Effizient und perfomant zu speichern.
 

Timon3

Team ModMii

Registriert
17 Juli 2013
Beiträge
499
Selbstmodifizierende Programme sind möglich, allerdings vor allem von Antiviren-Programmen (verständlicherweise) nicht gerne gesehen. In deinem Fall klingt es am sinnvollsten, anstatt das Dateisystem als Datenbank zu nutzen einfach direkt eine Datenbank zu nutzen. Es gibt nach einer kurzen Recherche verschiedene Datenbank-Bibliotheken, die ihre Datenbank in eine einzelne Datei schreiben können - du liest sie also während dem Starten ein, machst deine Änderungen und schreibst sie beim Beenden wieder auf die Platte.
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
  • Thread Starter Thread Starter
  • #6
Selbstmodifizierende Programme sind möglich, allerdings vor allem von Antiviren-Programmen (verständlicherweise) nicht gerne gesehen.
Daran habe ich noch gar nicht gedacht - Das wird dann vermutlich auch schwierig zu umgehen sein, dass das Programm dann als "sicher" durchgeht.

Einfach direkt eine Datenbank zu nutzen. Es gibt nach einer kurzen Recherche verschiedene Datenbank-Bibliotheken, die ihre Datenbank in eine einzelne Datei schreiben können
Die Möglichkeit habe ich total übersehen. Klar gibt es Bibliotheken, die Datenbanken implementieren.

du liest sie also während dem Starten ein, machst deine Änderungen und schreibst sie beim Beenden wieder auf die Platte.
Da muss ich mir etwas "besseres" einfallen lassen. Die Daten sollen nach Möglichkeit sofort gespeichert werden, teilweise noch während der Eingabe (also alle paar Sekunden). Das ist mit einem Dateisystem etwas einfacher zu handhaben, da nicht gleich alles neu geschrieben werden muss.
Zudem werden die Daten alle verschlüsselt - entweder verschlüssele ich die Daten in der Datenbank oder die Datenbank an sich. Wobei mir letzteres sicherer und performanter erscheint, da auch die Felder usw. unbekannt bleiben. Das ist aber ein anderes Thema.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
@drfuture:

Daran hatte ich auch gedacht, aber da ist
1)die Frage, ob das zur Laufzeit geht.
2) könnten die Daten flüchtig sein. Ich meine vor Jahren nur mal das Kommentarfeld von NTFS verwendet haben zu wollen, und die Daten gingen, glaube ich, z.B. beim Zippen verloren.
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
  • Thread Starter Thread Starter
  • #9
Du könntest ja auch mal das Ganze Programm erklären - evtl. gibts auch allgemeine Designfehler?
Das Programm ist immer für einen einzigen Anwender gedacht - eventuell gibt es dieses "Programm" mit den Daten allerdings mehrfach auf einem Computer.
Da die Daten, die jeweils gespeichert sind, sehr sensibel (sein können/) sind, möchte ich diese verschlüsseln (anderer Thread) und in einer Datei speichern, damit die Daten nicht verloren gehen, sollte man das Programm beispielsweise auf einen USB-Stick ziehen oder ähnliches. Gibt es mehrere Dateien für das Programm, habe ich die Erfahrung gemacht, dass es viele User schaffen, Daten nicht mitzukopieren und somit nichts mehr geht.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
@drfuture:

Ich habe mich heute morgen an "safey" erinnert, welches ich noch irgend wo gespeichert haben muß. Ein Programm, welche genau das geforderte macht, die Daten in der exe speichern.

Man sollte sich das mit den Datenströmen mal ansehen. ":" im Pfad ? :unknown:

EDIT:

"safey" war kein gutes Beispiel. Das ist nur für Passwörter, sprich kurze texte. Des weiteren springt jetzt mein Virenscanner nach Eingabe von Daten darauf an. Vielleicht Zufall, vielleicht aber auch eine nicht ganz einwandfreie Methode zur exe-Manipulation.

Alternate Data Streams:
1) Das funktioniert aus dem laufenden Betrieb heraus.
2)Aber meine Vermutung war richtig: Da das NTFS ist, gehen die Informationen beim Zippen verloren. Kopieren mit Infos auf einen FAT-Stick geht natürlich erst recht nicht.
 
Zuletzt bearbeitet:
Oben