Pigny: Objekte in Java abspeichern

Servus Leutz,

hab ma ne Frage zum Thema Objekte abspeichern.
Hab mir ne Klasse geschrieben die ein User-Objekt beschreibt und will mehrere dieser Objekte abspeichern. Also in einer Datei.
Hat jemand von euch ne Idee wie man sowas realisieren könnte?
Bin für jeden Hinweis dankbar, mir wachsen nämlich schon graue Harre..

Dank Euch
Pigny

  1. Hej,

    Hab mir ne Klasse geschrieben die ein User-Objekt beschreibt und will mehrere dieser Objekte abspeichern.

    Was bedeutet für Dich Objekt?

    In Java is ein Objekt eine interne Datenstruktur die eine Insatnz einer Klasse ist, d.h. die Klasse beschreibt, welche Attribute das Objekt tragen darf und gibt einen Satz Methoden mit, mit denen die Attribute gekapselt und verändert werden und über die das Objekt kommunizieren kann.

    "Diese" Objekte, die in deinem Arbeitsspeicher liegen lassen sich so ohne weiteres nicht abspeichern. Was ich dir empfehlen kann ist die Klassen um die Methoden leseVonPlatte() und schreibNachPlatte() zu ergänzen und dir ein geeignetes Dateiformat oder je nach Umfang ne Datenbankstruktur für deine Objekte zu überlegen. Ich empfehle z.B. ein kleines Markup:

      
    class Kunde{  
      
      private String name;  
      private String geschlecht;  
      private String schuhgroesse;  
      private static int count;  
      
      Klasse(String xmlKunde){  
        // lese das xmlKunde aus  
        // [...]  
      }  
      
      Klasse(String name, String geschlecht, String schuhgroesse){  
        this.name = name;  
        // usw. [...]  
      }  
      
      
      // Methoden  
      // [...]  
    }  
    
    

    So ein solches Objekt lässt sich doch prima abspeichern in:

      
      <kunde>  
        <name>Max</name>  
        <geschlecht>maennlich</geschlecht>  
        <schuhgroesse>bigfoot</schuhgroesse>  
      </kunde>  
    
    

    Beste Grüße
    Biesterfeld

    --
    Selfcode:
    fo:| br:> n4:? ie:{ mo:} va:} de:] zu:| fl:| ss:| ls:]
    1. Hi,

      also wenn du diese Methode noch möglichst Standardkonform halten möchtest, so dass jeder auch weiß was er damit anfangen soll, dann empfehle ich die Orientierung am Serializable-interface http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html. Ist aber halt nur ein Interface, das einige der Standard-Java-Objekte von Haus aus implementieren, bei User-Objekten kommst du nicht um das selbst schreiben drumherum.

      MfG
      Rouven

      --
      -------------------
      ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
      1. Hej,

        man merkt, dass ich doch noch Anfänger bin.

        dann empfehle ich die Orientierung am Serializable-interface http://java.sun.com/j2se/1.4.2/docs/api/java/io/Serializable.html.

        Grad mal überflogen. Wird sehr wahrscheinlich in den nächsten Tagen bei mir mal zum Einsatz kommen, daher herzlichen Dank.

        Beste Grüße
        Biesterfeld

        --
        Selfcode:
        fo:| br:> n4:? ie:{ mo:} va:} de:] zu:| fl:| ss:| ls:]
    2. Hej,

      Objekte zu überlegen. Ich empfehle z.B. ein kleines Markup:

      Je nach dem wie flach oder tief deine Datenstruktur ist ist das natürlich mit Kanonen auf Spatzen geschossen und eine csv-Datei ist vollkommen ausreichend:

      Name;Geschlecht;Schuhgröße;
      Max;maennlich;bigfoot;
      Petra;weiblich;tinyfoot;
      [...]

      Dann brauchst Du nur noch mit einem Tokenizer jede Dateizeile durchzugehen, und bekommst so die Objektfelder zurück.

      Beste Grüße
      Biesterfeld

      --
      Selfcode:
      fo:| br:> n4:? ie:{ mo:} va:} de:] zu:| fl:| ss:| ls:]
  2. serialisieren heist das zauberwort. dann kannst du dies als filestream speichern.

  3. Hallo,

    deine Frage ist etwas zu unkonkret um dir gezielte Ratschläge zu geben.
    Deshalb gibt's von mir nur allgemeine Links. Wenn du konkrete Probleme
    hast, solltest du dich einfach (in diesem Thread) nochmal melden.

    Wie schon richtig erkannt wurde, ist Serialsierung (Serialization) das,
    was du _vermutlich_ suchst. (Natürlich kannst du auch von Hand
    serialisieren und deserialisieren.)

    Die relevanten Klassen und Interfaces findest du im Package java.io.
    Hier sind insbesondere Serializable, ObjectOutputStram, ObjectInputStream,
    ObjectOutput und ObjectInput relevant.

    Im Javabuch findest du ein Kapitel zur Serialisierung.
    Auch in der Insel findest du etwas dazu. (Die Seite ist aktuell nicht
    erreichbar. Könnte gut sein, daß der Link nicht stimmt...)

    Im Java-Almanac findest du noch 3 Code-Beispiele zur Serialisierung:
    http://javaalmanac.com/egs/java.io/SerializeObj.html
    http://javaalmanac.com/egs/java.io/DeserializeObj.html
    http://javaalmanac.com/egs/java.io/DeserSingle.html

    Und, wie gesagt, bei konkreten Problemen einfach melden.

    Gruß
    Slyh

    1. Hallo,

      hab den Rat Deiner Vorredner angenommen und mich mal zum Thema Serialisierung informaiert. Hab mir auch eine Methode geschrieben:

      public void ObjectWriter(){
      try{
        ObjectOutputStream objOut = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(FilePath+"\"+FileName)));
        objOut.writeObject(USER1);
        objOut.close();
      }
      catch(FileNotFoundException fne){
        System.out.println("Datei konnte nicht gefunden werden!");
      }
      catch(IOException e){
      System.out.println("Es ist ein Fehler beim oeffnen aufgetreten!");
      }
      }

      Hab das auch schon getestet und funktioniert soweit ganz gut.
      Nun hab ich aber folgendes Problem:
      Wie kann ich der Methode mein Objekt übergeben? Ich würde gern diese Methode für bspw. "class user" und "class osbt" benutzen. Sozusagen universell.
      Kann ich das beim übergeben variabel lassen oder muß ich das festlegen?
      Muss ich also "public void ObjectWriter(user u1){..." schreiben oder geht das auch anders?

      1. Hallo,

        heißer Tipp:
        Verwende die Groß/Kleinschreibung der Java  Naming Conventions. Du
        machst es Leuten, die deinen Code lesen müssen/sollen/wollen damit
        erheblich leichter.

        Hab das auch schon getestet und funktioniert soweit ganz gut.
        Nun hab ich aber folgendes Problem:
        Wie kann ich der Methode mein Objekt übergeben? Ich würde gern diese Methode für bspw. "class user" und "class osbt" benutzen. Sozusagen universell.
        Kann ich das beim übergeben variabel lassen oder muß ich das festlegen?
        Muss ich also "public void ObjectWriter(user u1){..." schreiben oder geht das auch anders?

        Nein. Die Methode ObjectOutputStream.writeObject(Object) nimmt ein
        Objekt von der obersten Vaterklasse "Object" entgegen. Du kannst
        also jedes Objekt serialisieren.

        Deine Methode könnte also so heißen:
          public void ObjectWriter(Object obj) { ... }

        Eine Methode "ObjectWriter" zu nennen, ist übrigens mehr als unglücklich,
        weil es wie ein Konstruktor aussieht und klingt.

        Du brauchst außerdem nicht für jedes Element eine neue Datei öffnen.
        Schreibe alle Objekte einfach nacheinander raus, so wie das z.B.
        hier gezeigt ist:

        FileOutputStream fos = new FileOutputStream("t.tmp");
          ObjectOutputStream oos = new ObjectOutputStream(fos);

        oos.writeInt(12345);
          oos.writeObject("Today");
          oos.writeObject(new Date());

        oos.close();

        Gruß
        Slyh