Properties serializable machen

Diskutiere Properties serializable machen im Allgemeine Java-Themen Forum; Hi, für meine derzeitige Anwendung würde ich gerne meine Objekte in eine Datei schreiben. Bisher habe ich mir ein eigenes Format ausgedacht...

  1. Kababär
    Kababär Aktives Mitglied
    Hi,

    für meine derzeitige Anwendung würde ich gerne meine Objekte in eine Datei schreiben. Bisher habe ich mir ein eigenes Format ausgedacht (.csv-Format), welches ich aber nicht so prickelnd finde. Es sind zwar nur ein paar Attribute zu speichern, aber dennoch hätte ich gerne ein komfortablere Lösung. Die Objekte sollen dann in einer TableView dargestellt werden, weshalb ich Properties und eine Obversable List verwende.
    Jetzt habe ich das Problem, dass die Properties wohl nicht serializable sind, denn ich bekomme beim Schreiben folgende Fehlermeldung:
    Meine "Model"-Klasse sieht so aus:
    Code (Text):
    public class Module implements Serializable {

        /**
         * Serialize ID
         */
        private static final long serialVersionUID = 1L;

        public StringProperty name;

        public IntegerProperty semester;

        public DoubleProperty grade;

        public StringProperty teacher;

        public IntegerProperty ects;

        public IntegerProperty tries;

        public ObjectProperty<LocalDate> date;

        //weiter getter (für Inhalt und einmal für Property) und settter
     
    Wie würdet ihr das nun lösen? Ich würde nur ungern auf die Properties verzichten wollen ...
    Vielen Dank im voraus.
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. Sogomn
    Sogomn Mitglied
    Was spricht denn gegen die schon vorhandene "Properties"-Klasse?
     
  4. Kababär
    Kababär Aktives Mitglied
    Dass die oben genannte Exception fliegt wenn ich die Objekte in eine Datei schreiben will.
    Das hier ist sind die Methoden zum lesen/schreiben der Objekte aus der Datei:
    Code (Text):
    public class FileSerialization {

        /**
         * The standard path for the data file
         */
        private final static String programmPath = "meinPfad";

        /**
         * Writing module object to file.
         *
         * @param module
         */
        public void serializeAddress(Module module) {

            FileOutputStream fout = null;
            ObjectOutputStream oos = null;

            try {

                if (Files.exists(Paths.get(programmPath), LinkOption.NOFOLLOW_LINKS)) {
                    System.out.println("Datei existiert bereits.");
                    Files.delete(Paths.get(programmPath));
                    System.out.println("Datei gelöscht.");
                } else {
                    System.out.println("Datei existiert nicht.");
                    Files.createFile(Paths.get(programmPath));
                    Files.setAttribute(Paths.get(programmPath), "dos:hidden", true);
                }
                fout = new FileOutputStream(programmPath);
                oos = new ObjectOutputStream(fout);
                oos.writeObject(module);

                System.out.println("Done");

            } catch (Exception ex) {

                ex.printStackTrace();

            } finally {

                if (fout != null) {
                    try {
                        fout.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                if (oos != null) {
                    try {
                        oos.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            }
        }

     
        /**
         * Reading a module from file.
         *
         * @param filename
         * @return
         */
        public Module deserializeAddress() {

            Module module = null;
            String filename = programmPath;
            FileInputStream fin = null;
            ObjectInputStream ois = null;

            try {

                fin = new FileInputStream(filename);
                ois = new ObjectInputStream(fin);
                module = (Module) ois.readObject();

            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {

                if (fin != null) {
                    try {
                        fin.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                if (ois != null) {
                    try {
                        ois.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

            }

            return module;

        }
     
     
  5. knilch
    knilch Aktives Mitglied
    Hi Kababär,
    Ich hatte auch schon mal ein ähnliches Problem.
    Damit konnte ich es lösen:
    Statt implements Serializable hab ich implements Externalizable genommen, und dann die beiden Methoden: readExternal und writeExternal überschrieben. Damit konnte ich die Serialisierung dann machen.
    Hier ein Beispiel:
    Code (Java):
    import java.io.Externalizable;
    import java.io.IOException;
    import java.io.ObjectInput;
    import java.io.ObjectOutput;
    import javafx.beans.property.SimpleStringProperty;

    public class Packet implements Externalizable {
        private static final long serialVersionUID = -8256294089416034037L;
        private SimpleStringProperty varName = new SimpleStringProperty("");
        private SimpleStringProperty varValue = new SimpleStringProperty("");
     
        public Packet() {
            this("", "");
        }
        public Packet(String varName, String varValue) {
            setVarName(varName);
            setVarValue(varValue);
        }
        public String getVarName() {
            return varName.get();
        }
        public void setVarName(String var) {
            varName.set(var);
        }
       
        public String getVarValue() {
            return varValue.get();
        }
        public void setVarValue(String value) {
            varValue.set(value);
        }
        public SimpleStringProperty getVarNameProperty() {
            return varName;
        }
        public SimpleStringProperty getVarValueProperty() {
            return varValue;
        }
     
        @Override
        public String toString() {
            return getVarName() + ": " + getVarValue();
        }
     
        @Override
        public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
            setVarName((String) in.readObject());
            setVarValue((String) in.readObject());
        }
     
        @Override
        public void writeExternal(ObjectOutput out) throws IOException {
            out.writeObject(getVarName());
            out.writeObject(getVarValue());
        }
    }
     
  6. Tobse
    Tobse Bekanntes Mitglied
    Nimm doch einfach eine H2DB + JPA und gut ists....
     
  7. Kababär
    Kababär Aktives Mitglied
    Ich glaube der Aufwand für eine H2DB + JPA wäre deutlich größer als die Objekte einfach zu de/serialisieren.. wobei beides für mich Neuland ist.

    knilch ich probier das mal aus, danke :)

    Edit: Danke knilch, scheint zu funktionieren :)
     
    Zuletzt bearbeitet: 11. Dez. 2016
  8. knilch
    knilch Aktives Mitglied
    Gerne...
     
Die Seite wird geladen...

Properties serializable machen - Ähnliche Themen

Properties oder Serializable
Properties oder Serializable im Forum Java Basics - Anfänger-Themen
IntelliJ - .properties in jar einbinden
IntelliJ - .properties in jar einbinden im Forum IDEs und Tools
Lesen/Schreiben Properties: in eclipse geht, als JAR nicht
Lesen/Schreiben Properties: in eclipse geht, als JAR nicht im Forum Java Basics - Anfänger-Themen
Gibt es in Java Properties (wie in C#)
Gibt es in Java Properties (wie in C#) im Forum Java Basics - Anfänger-Themen
Von einem Objekt auf Properties zugreifen
Von einem Objekt auf Properties zugreifen im Forum Java Basics - Anfänger-Themen
Thema: Properties serializable machen