wie kann ich denn in meinem Java programm etwas abspeichern, so das ich beim nächsten start wieder darauf zugreifen kann ?
Am besten wäre wenn ich eine Array irgendwie abspeichern könnte. oder muss ich das in einer Textdatei machen ? aber das is dann so schwierig wieder abzurufen und kompliziert.
muss man für sowas Datenbanken benutzen ?
nach was muss ich da suchen oder gibts vieleicht ein tutorial ?
// Am Ende des Programmes zum Schreiben:
double[] array = ... // der wird gespeichert
FileOutputStream fout = new FileOutputStream( "datei" );
DataOutputStream out = new DataOutputStream( fout );
out.writeInt( array.length );
for( int i = 0; i < array.length; i++ )
out.writeDouble( array[i] );
out.close();
///////////////////////////////////
// Beim Start des Programmes um zu lesen
FileInputStream fin = new FileInputStream( "datei" );
DataInputStream in = new DataInputStream( fin );
double[] array = new double[ in.readInt() ];
for( int i = 0; i< array.length; i++ )
array[i] = in.readDouble();
in.close();
// array - wurde gelesen
ObjectInput/OutputStream ist auch eine Variante, ich würde die aber erst empfehlen, wenn du weisst was sie machen :arrow: :###
ja nee. ich meinte schon eine Datei oder Datenbank. Hab auch keine Ahnung was es sonst gibt
Aber ich hab noch ein Problem mit dem code oben und zwar: Was muss ich denn da bei "Datei" eintragen.
In dem Buch, dass ich hab schreibt man nur in eine Text datei also in Text.txt oder so.
Ich hab gestern noch irgendwas von XML Datein gelesen.
und kann ich vieleicht auch eine ganze Klasse inklusive seiner static variablen speichern? Das wäre noch besser als nur das Array zu speichern.
Könnt ihr mir vieleicht eine Internetseite empfehlen auf der Java erklärt wird mit beispielen und tutorials und so?
Du brauchst es nicht kaufen, du kannst es dort von der Webseite kostenlos herunterladen oder direkt online benutzen.
Es sei denn du willst Papier in den Händen halten.
Zum Thema: Stichwort Objektserialiserung. Kannste gleich nachlesen. ^^
Der Pfad zur Datei muss da hin. "datei" ist z.B. auch ein gültiger Pfad, aber du kannst auch "C:/blabla/x.dat" schreiben wenn du willst.
btw: Es gibt keinen Unterschied zwischen Textdateien und anderen Dateien, die Unterscheidung geschieht erst durch das Programm (beide Dateien sind erstmals bedeutungslose Byte-Arrays :wink
Nein, Endungen müssen bei der BFE (Behörde für Endungen) beantragt werden. Das kann ganz schön teuer werden, also überleg dir im vorraus wie deine Dateien enden sollen.
Die Behörde trägt die Endungen in ein Register ein, und verhindert so, dass jemand anders die Endung benutzen kann. Bei einem Update deines Betriebssystemes wird jeweils auch das aktuelle Register auf dein PC geladen, und so findet man jeweils pro Endung das richtige Programm.
ich muss jetzt einfach nochma was fragen.
ich bin schon die ganze zeit am rumprobieren. also ich kann jetzt in meinem programm ganz locker Strings speichern und auch das aktuelle datum und halt alle primitiven datentypen.
wenn ich nun aber meine eigene klassen serialisieren will kann ich sie zwar abspeichern und auch wieder laden, aber nur zur laufzeit des programms, wenn ich es beeende geht alles wieder weg, während das datum ganz normal gespeichert wird und auch beim nächsten start noch da ist.
woran liegt das.
muss ich in die Klasse eine Methode schreiben?
und wie mach ich eine klasse wirklich persistent ? ich hab mir das in dem Java buch von oben (java is ne insel) durchgelesen werd aber nicht ganz schlau daraus.
wäre echt toll wenn mir das mal jemand erklären könnte bitte
Diese beiden methoden benutzte ich und anstelle des Strings hab ich meine Klasse eingegeben.
Code:
static void serialize( String filename )
{
try
{
FileOutputStream file = new FileOutputStream( filename );
ObjectOutputStream o = new ObjectOutputStream( file );
o.writeObject ( "Today" );
o.writeObject ( new Date() );
o.close();
}
catch ( IOException e ) { System.err.println( e ); }
}
static void deserialize( String filename )
{
try
{
FileInputStream file = new FileInputStream( filename );
ObjectInputStream o = new ObjectInputStream( file );
String string = (String) o.readObject();
Date date = (Date) o.readObject();
o.close();
System.out.println( string );
System.out.println( date );
}
catch ( IOException e ) { System.err.println( e ); }
catch ( ClassNotFoundException e ) { System.err.println( e ); }
}
ja das hab ich gemacht, das speichern funktioniert ja, aber halt nur wärend der laufzeit, kA warum.
aber ich glaube mein fehler liegt daran, dass ich die static variablen der Klasse speichern will und die werden dabei ja irgendwie nicht gespeichter weil die zu der classe gehören und nicht zum object oder so.
gibt es denn keine möglichkeit static variablen zu speichern? mein ganzes programm baut darauf auf
Ja du hast wahrscheinlich recht das war schlecht geplant. das is mein erstes größeres programm.
aber das muss ja eigentlich auch irgendwie gehn.
also ich hab jetzt gemacht was du gesagt hast. Ich hab mir ne klasse speichern geschrieben, in dessen konstruktor ich Instanzen von den static varialben mache. aber wenn ich dann speichern will bekomme ich diese fehler meldeung
LOL Jetzt verstehe ich endlich warum du die Daten nach Beenden des Programms nicht mehr lesen kannst
Du kannst sie schon lesen, speicherst sie aber in 2 lokalen Variablen deiner laden()-Methode.
Die haben natürlich nichts gemein mit deinen eigentlichen Variablen save und date die durch
das Einlesen nicht verändert werden und somit leer bleiben.
Währen das Programm läuft, sind deine Daten nur darum wieder da. weil sie ja bereits
vor dem "Lesen" Inhalt hatten und dieser nicht gelöscht wurde.
Leider kann ich dir bei deiner eigentlichen Frage nicht helfen
Mir ist nicht klar, was diese Fehlermeldung bedeuten kann.
danke für alle hilfen.
ich habs jetzt hinbekommen. wens interessiert:
ich hab in meine Klasse eine Speichern methode eingebaut, die alle attrribute einzeln einliest und in die datei schreibt.
Jetzt kann ich von jeden statischen variable diese methode aufrufen und dann mit der Laden methode aus meiner MainKlasse alles später wiederherstellen.