Direkt zu anfang: Seit nicht zu hart mit mir ich bin ziemlicher Anfänger und habe bestimmt viele Fehler drinnen.
also Geschichte ist Folgende:
Ich habe einen zufallsgenerator gebastelt,
zuerst habe ich eine Arraylist wo ich die Namen einfüge.
Danach wird diese in einen Iterator umgewandelt und durchgemixxt.
Danach werden die Namen in JLabels angezeigt.
Nun möchte ich halt das diese ArrayList oder der Iterator (Was leichter ist)
als .txt gespeichert wird und ich diese später auch wieder auslesen kann.
So weit bin ich schonmal:
Java:
// Deklarieren der VariablenArrayList<String> list =newArrayList<String>();Iterator<String> itNamen = list.iterator();String line;BufferedReader in =newBufferedReader(newFilereader("9IF.txt"));// Error:unreported Exception java.io.FileNotFoundException; must be caught or declared to be thrown// Die Mischen Funktion:Collections.shuffle(list);for(JLabel labelx : alleMeineLabels){//Schleife über alle JLabelsif(itNamen.hasNext()){//Sicherheitsabfrage: Gibt es noch weitere Einträge in der Liste
labelx.setText(itNamen.next());//Nächster Eintrag aus der Liste (bzw. dem Iterator) wird auf das Label gesetzt.}else{
labelx.setText("Niemand");//Sollte vermutlich nicht vorkommen}}//auslesen:FileNotFoundException fnfe;{System.out.println("Datei nicht gefunden!");}IOException ioe;{System.out.println("Fehler beim Lesen!");}while((line = in.readLine())!=null){//Ich oute das hier gleich mal als kopiert.kann mir einer Erklären warum nach dem While 2 Klammern kommen müssen?//wenn ich eine Lösche meint der wieder was mit nem Error das er ne Boolean braucht und ich ihm ne String vorsetze
list.add(line);}
in.close();// Error:unreported Exception java.io.IOException; must be caught or declared to be thrown
Du willst ja vermutlich nicht die Liste, sondern deren Inhalt in die Datei schreiben. Dabei ist es egal ob Du direkt über die Liste iterierst oder per Iterator
Zum Schreiben in Textdateien:JavaInsel#Mit dem FileWriter...
Das mit der for Schleife über die Labels und darin den Iterator verwenden ist merkwürdig. Der Inhalt der Labels steht doch in der Liste...
Java:
while((line = in.readLine())!=null){
Die zwei Klammern hier brauchst Du weil Du in der booleanschen Abfrage eine Anweisung bzw. Zuweisung hast. Man könnte das auch zerlegen.
Java:
line = in.readLine();while(line !=null){...
line = in.readLine();}
Ich glaube das mit der booleanschen Abfrage habe ich jetzt verstanden.
Also zu dem FileWriter:
Ich habe das zwar so weit hinbekommen das er eine neue Datei erstellt und dort etwas reinschreibt, nur ist da wieder ein Problem mit der Liste.
Ich habe folgendes Versucht:
Java:
fw.write(list<1>);// Er weigert sich mit den <> Klammern und mit einer int zu arbeiten
fw.write(list[1]);// Auf diese Art werden Arrayinhalte angezeigt und das funktioniert bei der liste//nicht
list.toArray();// Gibt keine Errors aus aber ich kann die Array nicht benennen bzw. weiß den //Namen nicht
Falls jemand weiß wie ich die Inhalte der Liste schreiben kann wäre das ne große Hilfe, in den API Docs habe ich jedenfalls nichts sinnvolles gefunden.
@ Michael...
Ich weiß nciht ob ich deine Frage so richtig verstanden habe aber die Schleife über alle Labels ist dort weil der Inhalt gerade nicht in den Labels steht.
Er wird über ein Eingabefeld in die Arraylist geschrieben und gespeichert und soll nachher in den 26 Labels ausgegeben werden.
Also das Speichern funktioniert hervorragend.
Es wird die ganze Liste übernommen.
Falls es jemand noch interressiert habe ich i mit ner Gezählten Schleife verbunden wodurch die Einträge schön nacheinander übernommen wurden.
Kann mir jetzt jemand erklären wie ich die Datei wieder auslese?
Irgendwelche Befehle um die Datei zu finden oder etwas in der Art?
Ich habe versucht einige Änderungen vorzunehmen und jetzt funktioniert das Speichern auch nicht mehr.
Ich habe alle Änderungen rückgängig gemacht und trotzdem will ers nicht starten.
In dem Stück quelltext hat er die Probleme soweit ich weiß
Java:
FileWriter fw =null;try{
fw =newFileWriter("Java.txt");for(int i=0;i!=26;i++){
fw.write(list.get(i));//<--- Genau hier will er nicht mehr, aber anstatt list.get z.B. "Test" macht er.
fw.append(System.getProperty("line.separator"));// e.g. "\n"}}catch(IOException e ){System.err.println("Konnte Datei nicht erstellen");}finally{if( fw !=null)try{ fw.close();}catch(IOException e ){}}
Und die Errors sehen wie folgt aus:
Java:
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException:Index:0,Size:0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at Sitzordnung.Datei_speichernActionPerformed(Sitzordnung.java:437)
at Sitzordnung.access$300(Sitzordnung.java:38)
at Sitzordnung$4.actionPerformed(Sitzordnung.java:228)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6263)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6028)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4630)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4460)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Ich bedanke mich im vorraus für die Hilfe und hoffe mir ist zu helfen
Dankesehr nrg, einen Befehl wie .size habe ich schon lange gesucht aber irgendwie nie was gefunden.
Aber ich würde gerne wissen wie du das Herausgefunden hast. kannst du die Errors klar lesen?
Die Liste war leer weil die errors auftauchten egal was drin war, also hab ich direkt auf "Speichern" gedrückt^^
nunja ich hätte da noch einige Probleme.
mit
Java:
fw =newFileWriter("Java.txt");
kann man ja den Namen angeben.
Ich habe jetzt noch eine Texteingabe eingebaut mit dem der Name selbst schreiben kann.
aber wenn ich