• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Methode, die einen arry von objekten speichert in einer datei

LetsSebi

LetsSebi

Mitglied
Hey, ich habe folgendes Problem, ichw eiß nicht wie ich, eien methode schreiben soll, die meine erstellten objekten in ein array reingibt und danach in einer datei ausgibt!
 
I

infos9

Mitglied
Die Objekte könntest du serializable machen und das Array in eine Liste packen, dann alles mit ObjectOutputStream schreiben
 
LetsSebi

LetsSebi

Mitglied
Java:
import java.io.*;

public class DataStreamBsp{
   private String s;
   private int i;
   private byte b;
   private double d;
   private boolean t;
//*************************************
   public DataStreamBsp(String s, int i, byte b, double d, boolean t){
      this.s = s;
      this.i = i;
      this.b = b;
      this.d = d;
      this.t = t;
   }
//**********************************
   public String toString (){
      return " s= "+s
           +" i= "+i
           +" b= "+b
           +" d= "+d
           +" t= "+t;
   }
   //**********************************
   public boolean speichern(String fileName){
      try{
         DataOutputStream ds = new DataOutputStream(new FileOutputStream(fileName));

         ds.writeUTF(s); //Alternativen: writeChars, writeBytes
         ds.writeInt(i);
         ds.writeByte(b);
         ds.writeDouble(d);
         ds.writeBoolean(t);
            //es gibt auch writeFloat, writeShort, writeLong,....



         ds.close();
         return true;
      }catch(IOException e){
         System.out.println("Specihern ging scheif: \n"+e.getMessage());
      }
      return false;
   }
   public static void arraySpeichern(String fName, String DataOutputStream){
      ,mnbjhbkihjbkijoiklujh = gaga;

   }




   //*******************
   //Ue: (1)schreibe ein methode, die ein arry von solchen objekten speichert
   //   (2)schreibe ein methode, die eine solche Datein hereinliest --> liefert arry
   //    (3)testen!
   //   (4)schreibe einen Konstruktor, der eienn filenamen �bhernimmt und das objekt aus der datei initialisiert
   //*******************
   public boolean laden(String fileName){
      try{
         DataInputStream ds = new DataInputStream(new FileInputStream(fileName));

         s=ds.readUTF(); //Alternativen: writeChars, writeBytes
         i=ds.readInt();
         b=ds.readByte();
         d=ds.readDouble();
         t=ds.readBoolean();
            //es gibt auch writeFloat, writeShort, writeLong,....



         ds.close();
         return true;
      }catch(IOException e){
         System.out.println("Specihern ging scheif: \n"+e.getMessage());
      }
      return false;
   }
   //zum testen
   public static void main(String[] args){


      DataStreamBsp ds1 = new DataStreamBsp("Hallo",12,(byte)1,1.7321,true);

      System.out.println(ds1+"\n--->das war ds1");

      ds1.speichern("Bin1.BIN3i");

      DataStreamBsp ds2 = new DataStreamBsp("Morning",7,(byte)3,3.14159165,false);

      System.out.println(ds2+"\n--->das war ds2");

      ds2.speichern("Bin2.BIN3i");

      //absichtlich 1->2, 2->1, damit mana uch was siehtt....
      ds1.laden("Bin2.BIN3i");
      ds2.laden("Bin1.BIN3i");

      System.out.println(ds1+"\n--->das war ds1");
      System.out.println(ds2+"\n--->das war ds2");

      DataStreamBsp dsGeladen = new DataStreamBsp("",0,(byte)0,0,false);

      dsGeladen.laden(Console.readLine("Dateiname: "));
      System.out.println(dsGeladen+"\n--->das war dsGeladen");
   }
 
Zuletzt bearbeitet von einem Moderator:
I

infos9

Mitglied
Hier bitte
Java:
import java.io.*;
import java.util.Arrays;
import java.util.List;

public class DataStreamBsp implements Serializable {
    private static final long serialVersionUID = 1L;
    private String s;
    private int i;
    private byte b;
    private double d;
    private boolean t;

    // *************************************
    public DataStreamBsp(String s, int i, byte b, double d, boolean t) {
        this.s = s;
        this.i = i;
        this.b = b;
        this.d = d;
        this.t = t;
    }

    // **********************************
    public String toString() {
        return " s= " + s + " i= " + i + " b= " + b + " d= " + d + " t= " + t;
    }

    // **********************************
    public static boolean speichern(String fileName, DataStreamBsp dsb) {
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName))) {
            oos.writeObject(dsb);
            return true;
        } catch (IOException e) {
            System.out.println("Specihern ging scheif: \n" + e.getMessage());
            return false;
        }
    }

    public static void arraySpeichern(String fileName, DataStreamBsp[] array) {
        List<DataStreamBsp> asList = Arrays.asList(array);
        try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName))) {
            oos.writeObject(asList);
        } catch (IOException e) {
            System.out.println("Specihern ging scheif: \n" + e.getMessage());
        }
    }

    public static DataStreamBsp[] arrayLaden(String fileName) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName))) {
            return ((List<DataStreamBsp>) ois.readObject()).toArray(new DataStreamBsp[0]);
        } catch (IOException | ClassNotFoundException e) {
            System.out.println("Array Laden ging scheif: \n" + e.getMessage());
            return null;
        }
    }

    // *******************
    // Ue: (1)schreibe ein methode, die ein arry von solchen objekten speichert
    // (2)schreibe ein methode, die eine solche Datein hereinliest --> liefert arry
    // (3)testen!
    // (4)schreibe einen Konstruktor, der eienn filenamen �bhernimmt und das objekt
    // aus der datei initialisiert
    // *******************
    public static DataStreamBsp laden(String fileName) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(fileName))) {
            return (DataStreamBsp) ois.readObject();
        } catch (IOException | ClassNotFoundException e) {
            System.out.println("Laden ging scheif: \n" + e.getMessage());
            return null;
        }
    }

    // zum testen
    public static void main(String[] args) {

        DataStreamBsp ds1 = new DataStreamBsp("Hallo", 12, (byte) 1, 1.7321, true);

        System.out.println(ds1 + "\n--->das war ds1");

        speichern("Bin1.BIN3i", ds1);

        DataStreamBsp ds2 = new DataStreamBsp("Morning", 7, (byte) 3, 3.14159165, false);

        System.out.println(ds2 + "\n--->das war ds2");

        speichern("Bin2.BIN3i", ds2);

        // absichtlich 1->2, 2->1, damit mana uch was siehtt....
        ds1 = laden("Bin2.BIN3i");
        ds2 = laden("Bin1.BIN3i");

        System.out.println(ds1 + "\n--->das war ds1");
        System.out.println(ds2 + "\n--->das war ds2");

        DataStreamBsp[] dsba = { ds1, ds2 };
        arraySpeichern("Bin1.BIN3i.a", dsba);
        DataStreamBsp[] dsba2 = arrayLaden("Bin1.BIN3i.a");

        System.out.println(Arrays.toString(dsba2));
    }
}
 
B

Barista

Bekanntes Mitglied
Die Objekte könntest du serializable machen und das Array in eine Liste packen, dann alles mit ObjectOutputStream schreiben
Falls die Objekte (Klassen) mal geändert werden, könnten die Daten verlorens sein, weil das zurück-Deserialisieren nicht klappt.

Auf jeden Fall eine eigene serialversionid vergeben!
(Wird auch von Eclipse generiert, sicher auch von IntelliJ oder anderer IDE)

Alternativ als XML oder JSON speichern.
 
LetsSebi

LetsSebi

Mitglied
Falls die Objekte (Klassen) mal geändert werden, könnten die Daten verlorens sein, weil das zurück-Deserialisieren nicht klappt.

Auf jeden Fall eine eigene serialversionid vergeben!
(Wird auch von Eclipse generiert, sicher auch von IntelliJ oder anderer IDE)

Alternativ als XML oder JSON speichern.
ich weiß leider nicht, was du meinst und was Serializable ist
 
kneitzel

kneitzel

Top Contributor
Wollen wir mal etwas auf den TE eingehen statt in einer Diskussion abzudriften, die dem TE nicht weiter hilft.
@mrBrown evtl. die Diskussion um die id Absplitten. Dann kann Tobias erläutern, wieso er meint, dass die nicht gesetzt werden darf oder auf bestimmte Werte gesetzt werden muss oder warum Deine Aussagen falsch sein sollen ...


Serializeable / serialVersionUID
(Erläuterung - dient dem speichern/laden eigener Klassen! Dürfte für eure Aufgabe uninteressant sein - ebenso wie die Diskussion um serialVersionUID ... Das musst Du (noch) nicht kennen. Und ob das überhaupt behandelt werden wird ist offen ...)
ich weiß leider nicht, was du meinst und was Serializable ist
Serializeable ist erst einmal nur ein Interface: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/Serializable.html

Diese spielt bei der Objekt oder Binary Serialisierung eine Rolle und kennzeichnet erst einmal Klassen, die serialisiert werden können.
https://www.baeldung.com/java-serialization gibt (auf Englisch) diesbezüglich eine kleine Übersicht (wie viele andere Seiten im Internet auch.)

Diese Binary Serialisierung hat aber gewisse "Probleme". Ein Problem ist, dass die Klasse selbst nicht gespeichert wird sondern nur Angaben zu der Klasse. Diese sind aber nicht eindeutig:
a) Weniger problematisch: Es kann eine Klasse mehrfach geben. Da aber in der Regel Namespaces verwendet werden, ist hier das Problem erst einmal nicht wirklich vorhanden.
b) Eine Klasse wird mit der Zeit verändert. Felder verändern sich (Du machst auf Date ein LocalDate, aus int ein double oder was weiss ich), Felder kommen hinzu oder entfallen. Ich habe mir die Details der Speicherung nicht angesehen: ggf. kann die Reihenfolge auch wichtig sein! Wenn solch eine Veränderung eingetreten ist, dann wird die Binary Darstellung ungültig.

Es wird z.B. ein Date gelesen, aber das kann nicht in ein LocalDate gespeichert werden.

Daher haben Klassen noch eine interne Versionierung. Dies ist einfach eine statische long Variable serialVersionUID - und diese kann man setzen.
Wenn man diese gesetzt hat, dann ist sicher gestellt: Wenn Du Code mehrfach übersetzt, dann lädt er die Binary Version. Aber wenn nun eine Änderung dafür sorgt, dass die Binary-Darstellung nicht mehr stimmig ist, dann verändert man diese Version. Dadurch wird verhindert, dass beim Laden keine dubiosen Effekte auftreten :)

XML und JSON
(Ebenfalls uninteressant! Das wird hier in der Aufgabe wohl eher nicht verlangt!)
Generell ist es aber auch schon so, wie es @Barista in #9 am Ende geschrieben hat: Man kann statt der Binary Form auch andere Darstellungen wählen. JSON und XML kommen da in Frage. Und da gibt es sehr leistungsfähige Libraries, die dies sehr einfach machen.

Eure Aufgabe
Bei der euch gestellten Aufgabe dürfte es so sein, dass ihr aber auf diese Binary Serialization setzen sollt. Denn damit habt ihr ja schon erfolgreich erste Werte geschrieben. Ihr seid also in der Lage, die üblichen Werte zu schreiben.
Und ihr könnte beliebige Werte nacheinander schreiben ... beim Lesen müsst ihr diese nur in der richtigen Reihenfolge lesen.

Bei einem Array wäre also nur zu überlegen: Was habt da denn? Und was brauchst du, um es zu erstellen?
Für das Array brauchst Du:
a) die Größe - ohne die Größe kannst Du es nicht erstellen
b) die Werte des Arrays.

Daher vermute ich, dass ihr zu einer Lösung kommen solltet, in der ihr beim Speichern:
- die Größe des zu speichernden Arrays (int Wert) speichern sollt
- dann über das Array gehen und alle Werte speichern.

Das Laden läuft ebenso:
- Erst wird die Größe geladen. Damit kannst Du dann das neue Array erstellen
- Dann gehst Du durch und lädst in jedes Element des Arrays den Wert.

==> Damit bleibst Du bei dem bekannten Wissen und wendest dies nur an.
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
J Aufruf einer Methode über einen String Java Basics - Anfänger-Themen 11
C In einer Methode einen Array zurückgeben Java Basics - Anfänger-Themen 2
M Möglich? Methode aufrufen deren Bezeichner zur Laufzeit durch einen überg. String festgelegt wird Java Basics - Anfänger-Themen 3
E Abstrakter Methode einen Wert übergeben Java Basics - Anfänger-Themen 2
S Methode die Wrapper Klasse fuer einen primitiven Typ zurueck Java Basics - Anfänger-Themen 11
P Methode um einen String zu überprüfen Java Basics - Anfänger-Themen 12
V Wie übergebe ich einer Methode einen Wert per ActionListener Java Basics - Anfänger-Themen 2
W Kann ich in einer Methode einen Vector zurückgeben? Java Basics - Anfänger-Themen 2
Henri Webservice Delete und Update Methode funktioniert nicht Java Basics - Anfänger-Themen 27
T getAttribut in einer Methode aufrufen Java Basics - Anfänger-Themen 8
T Methode um Array mit for-each-Schleife auszulesen Java Basics - Anfänger-Themen 7
N Groß- und Kleinschreibung bei Java: void Methode Java Basics - Anfänger-Themen 1
BorussiaMG1900 Implementation einer Methode Java Basics - Anfänger-Themen 1
H Kürzere Scan Methode Java Basics - Anfänger-Themen 7
J Problem mit einer Methode die gewissen Inhalt einer Array löschen soll Java Basics - Anfänger-Themen 9
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
L Methode für Zweidimensionale Arrays Java Basics - Anfänger-Themen 4
H Methode mit Array als Rückgabe This method must return a result of Type int[] Java Basics - Anfänger-Themen 2
G Erste Schritte Array Mittelwert Methode Programmieren Java Basics - Anfänger-Themen 5
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
KogoroMori21 Methode in der main ausgeben Java Basics - Anfänger-Themen 2
L Methode zum invertieren eines Arrays Java Basics - Anfänger-Themen 7
s_1895 zu viele Zeilen in der Main Methode Java Basics - Anfänger-Themen 4
M Rekursive Java-Methode Java Basics - Anfänger-Themen 13
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
B Methoden warum macht die Methode nicht das was ich erwarte? Java Basics - Anfänger-Themen 2
L Attribute aus Klasse in berechnungs Methode übergeben Java Basics - Anfänger-Themen 1
Y Aufruf von Methode nicht möglich. Java Basics - Anfänger-Themen 2
O Instanzattribut per Getter Methode zuweisbar, warum? Java Basics - Anfänger-Themen 3
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
G Methoden Methode die aus einem Array ein Index ausgibt? Java Basics - Anfänger-Themen 2
R Boolean Methode Rückgabewert if() Java Basics - Anfänger-Themen 1
P Methode die ausgibt wie viele Primzahlen es zwischen 2 und n gibt Java Basics - Anfänger-Themen 10
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
kazzam94 Methode soll Array von Boolean zurückgeben Java Basics - Anfänger-Themen 5
M negate Methode Java Basics - Anfänger-Themen 13
JavaClara Fehlermeldung bei split-Methode Java Basics - Anfänger-Themen 12
A Methode in einer anderen Klasse verwenden Java Basics - Anfänger-Themen 1
Eule25 Methode mit Array Java Basics - Anfänger-Themen 4
J Methoden Frage: Array-Werte in anderer Methode ändern Java Basics - Anfänger-Themen 4
S HashMap contains() Methode Java Basics - Anfänger-Themen 1
F Methoden Methode richtig aufrufen Java Basics - Anfänger-Themen 3
JD_1998 Array-Position aus einer Methode in einer anderen ausgeben (Kurze Frage) Java Basics - Anfänger-Themen 2
JD_1998 Random Array sortieren mit Hilfe einer Methode Java Basics - Anfänger-Themen 4
T Methode implementieren Java Basics - Anfänger-Themen 21
JD_1998 Vorgegebene Methode erweitern um Hex -> Dezimal umzuwandeln Java Basics - Anfänger-Themen 1
A While Schleife - buubelsort methode Java Basics - Anfänger-Themen 2
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
X compareTo Methode wird ignoriert Java Basics - Anfänger-Themen 7
macle Rekursive String Methode, Gerade Zahlen rausfiltern Java Basics - Anfänger-Themen 10
B Wie kann ich etwas vor der Main-Methode ausführen? Java Basics - Anfänger-Themen 21
J Methode als Class anlegen Java Basics - Anfänger-Themen 7
K Übergabe von Werten (zweidimensionales Array) aus einer Methode an zweidimensionales Array in main() Java Basics - Anfänger-Themen 3
M this.object in einer parameterlosen Methode verwenden Java Basics - Anfänger-Themen 3
P Methode trim() ohne StringBuilder Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
B Methode für jede beliebe Entity erstellen Java Basics - Anfänger-Themen 7
O BiPredicate in einer forEach Methode Java Basics - Anfänger-Themen 10
B Klassen Abstrake Klasse und Template Methode Java Basics - Anfänger-Themen 4
parrot Array: Methode fügeHinzu Java Basics - Anfänger-Themen 13
B Eine Methode erstellen Java Basics - Anfänger-Themen 3
G Java charAt Methode Java Basics - Anfänger-Themen 10
B main Methode Java Basics - Anfänger-Themen 5
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
G Java LinkedList remove Methode Java Basics - Anfänger-Themen 5
L Wie greife ich in der Subklasse auf die Parameter einer Methode der Superklasse zu ? Java Basics - Anfänger-Themen 15
Bluedaishi Hilfe beim erklären dieser Methode Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
1 main-Methode erweitern, Nachfrage nach wiedeholung Java Basics - Anfänger-Themen 2
Y Methode + Parameters + Ein und Ausgabe Java Basics - Anfänger-Themen 1
L Variable von einer Methode zu einer anderen Methode inkl. einer "Zwischenmethode" Java Basics - Anfänger-Themen 1
G Java equals() Methode Java Basics - Anfänger-Themen 9
I Greedy Methode Methoden nutzen Java Basics - Anfänger-Themen 3
B Hilfe bei einer rekursiven Methode Java Basics - Anfänger-Themen 3
V Collections Methode in der Methode aufrufen Java Basics - Anfänger-Themen 2
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
S Auf Methode einer anderen Klasse zugreifen Java Basics - Anfänger-Themen 3
Z Methode zum Heraufinden von Anagrammen ohne Java API, Ausnahme String Java Basics - Anfänger-Themen 14
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
J main methode Java Basics - Anfänger-Themen 1
C Methode Seiten tauschen eines erstellten Rechtecks mit Seite A und B Java Basics - Anfänger-Themen 9
R Methode zwei Sortierkriterien der Klasse Comparator übergeben Java Basics - Anfänger-Themen 4
J Methoden set Methode array Java Basics - Anfänger-Themen 2
V Switch Methode macht Code kaputt Java Basics - Anfänger-Themen 18
J Apache Poi - createCell() Methode akzeptiert keinen Index aus for-schleife als Parameter Java Basics - Anfänger-Themen 4
S Wann Methode abstract? Java Basics - Anfänger-Themen 10
L Objekt an Methode übergeben Java Basics - Anfänger-Themen 4
H Rekursiv Methode ausführen bei Kindern Java Basics - Anfänger-Themen 12
R Methode Rückgabe Java Basics - Anfänger-Themen 10
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
bensdt Klasse erweitern um eine Methode "void decrement()" Java Basics - Anfänger-Themen 5
N Mit Objekt der Superklasse auf Methode der Subklasse zugreifen Java Basics - Anfänger-Themen 6
R Signatur einer Methode in JAVA Java Basics - Anfänger-Themen 4
B LinkedList add-Methode Java Basics - Anfänger-Themen 10
S Methode von vererbter Klasse, statt die der "Mutterklasse" aufrufen Java Basics - Anfänger-Themen 28
J Rekursive swapArray Methode Java Basics - Anfänger-Themen 69
Kirby.exe Methode aus Superklasse benutzen Java Basics - Anfänger-Themen 18
G Linked list, Methode zum Vertauschen von Elementen Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Anzeige

Neue Themen


Oben