
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!
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");
}
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));
}
}
Falls die Objekte (Klassen) mal geändert werden, könnten die Daten verlorens sein, weil das zurück-Deserialisieren nicht klappt.Die Objekte könntest du serializable machen und das Array in eine Liste packen, dann alles mit ObjectOutputStream schreiben
ich weiß leider nicht, was du meinst und was Serializable istFalls 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.
Serializeable ist erst einmal nur ein Interface: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/io/Serializable.htmlich weiß leider nicht, was du meinst und was Serializable ist