Serialiseren eines Objectes im Jar File

dngfng

Aktives Mitglied
Hallo,

ich will ein Object in den jar File meines Tools speichern.

Nur leider bekomme ich einen FileNotFoundException mit folgenden code. Mir ist schon klar geworden das diser pfad nicht aussreicht.

Habt ihr eine idee wie ich dies am besten bewerkstelligen kann?

Java:
File file = new File("/com/xxx/yyyy/storage/storage.obj");

...
...

    public static void storeObjectToFile(Object obj, File file) throws XXXFileWriterException {
        try {
            FileOutputStream fos = new FileOutputStream(file);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(obj);
        }
        catch (Exception e) {
            throw new XXXFileWriterException();
        }
    }

Danke im voraus.
 
ich glaub das dies keine GUte Idee ist etwas direkt ins JAR file zu speichern.

Du müsstest da dann eigentlich ein komplett neues jar archiv anlegen, d.h alle Datei die drin sind auslesen und in ein neues Archivpacken.
 
Hallo,

ich würde keine Laufzeitkomponenten im Jar File speichern.

Windows bietet dazu das User Verzeichnis, hier speichern die Programme ihre Zwischendaten.

Andernfalls würde ich im Arbeitsverzeichnis, also da wo die Datei liegt, alle Laufzeitsachen speichern.

Logdatein, Konfig .. bla bla

Gruß,

Marcinek
 
Normaller weise würde ich auch dazu tendieren es einfach im laufzeit verzeichniss zu speichern.

Hatte nur gedacht da dies kein eigentstendiges programm wird sondern eine API wollte ich das alles kompakter halten.

Wenn es nicht geht werde ich es einfach ins laufzeit verzeichnis schreiben müssen.

Kann mir jemand sagen wie ich dies System unabhängig ausfindig mache?
 
Eine API sollte auf keinen Fall unbemerkt iwas auf die Platte schreiben.

Was passiert, wenn der User der API diese ständig hin und her kopiert oder sein temp leert, dann ändert sich ja die Ausführung...? Oder die API in 2 JVMs benutzt (e.g. 2 Clients öffnet oder 2 Server startet), dann überschreiben sich die Dateien.

Ansonsten

Java:
System.getProperty("temp.path");
 
Zuletzt bearbeitet von einem Moderator:
Macht sin - nur ins Temp sollte es auch nicht da dies daten doch persisten sein müssen. Da die API die speicherung zum abgleich übernimmt.
 
System.getProperties("user.home");

HOME verzeichnis des USers


<Deine Klasse>.class.getProtectionDomain().getCodeSource().getLocation();

liefert dir eine URL auf den ort wo dein Klasse Liegt (bzw genauer eine URL auf das JAR File deiner Klasse) da kannst du dann mit new File(url).getParentFile() den Ordner bekommen in der dein Archiv liegt
 
Java:
new File(<CLASS>.class.getProtectionDomain().getCodeSource().getLocation().toString()).getParentFile();

Also das würde mir dann das Parent Verzeichniz geben wo ich meine Dateien hinablegen könnte?
 
Ich kriege folgende Exception when ich versuche eine Datei wie folgt zu erzeugen:

java.io.IOException: Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch

Java:
if(!file.exists()) {
            try {
                file.createNewFile();
            }
            catch (IOException e) {
                throw new XXXIOException();
            }
        }

Das File Object hat folgenden pfad: file:\D:\workspace.projxxxx\Dummy\keys.dat (aus inspect im Debug lauf)
 
Versuch das ganze mit diesem Befehl:

Java:
File f= new File(TEST.class.getProtectionDomain().getCodeSource().getLocation().getFile()).getParentFile();
 

Zurück
Oben