Java externe Textdatei auslesen und beschreiben ?

SoloMid

Grünschnabel
Hey Leute, ich will in meinem Spiel eine Art Highscoreliste erstellen, die in einer externen Textdatei gespeichert wird.

Hier mein bisheriger Quellcode:

Code:
public class Highscore {

	private BufferedReader in;
	
	private BufferedWriter out;
	
	private StringTokenizer st;
	
	int[] Werte = {0, 0, 0, 0, 0, 0};

	
	public Highscore(int pu) {
		
		//Textdatei + Punkte in Java einlesen
		
		try {
		
			BufferedReader in = new BufferedReader(new FileReader("src/Highscore.txt"));
		
			String zeile = "";
		 
		 
		 for(int i=0; i!=5; i++){
			
	        Werte[i] = Integer.parseInt(zeile);
				
		 }
		
		} catch (IOException e) {
		 
		
			Werte[5] = pu;
	
			}
		
		
		//Array + Punkte in Txt Datei einschreiben
		
		try {
			
			BufferedWriter out = new BufferedWriter(new FileWriter("src/Highscore.txt"));
			
			for (int z = 0; z < Werte.length; z++) {
				
				out.write(String.valueOf(pu));
				
				out.write(' ');
			}
			
			out.close();
			
		} catch (IOException e) {
			
		}
		
		
	}
}

Also erstmal wird ein integer Wert aus einer anderen Klasse übergeben. (Die erreichte Punktzahl)

Dann soll die Textdatei erstmal ausgelesen werden und in ein Array gepackt werden. Als Test hab ich erstmal das Array 6 Felder lang sein lassen, wobei jeder Wert erstmal 0 entspricht.

Das erste Problem ist, dass ich nicht weiß wo ich den BufferedReader schließen soll, da an jeder stelle eine Fehlermeldung kommt.
Eigentlich müsste ich vor dem "catch"
Code:
in.close();
eintragen, aber das funktioniert so nicht ganz.

Danach lass ich in das 6. Feld des Arrays die erreichte Punktzahl schreiben.

Nun wird noch mein Sortieralghorithmus folgen, der die Werte der Reihe nach sortiert.

Als nächstes soll der BufferedWriter das Array der Reihe nach wieder in das Textdokument schreiben.


Mein Problem ist nun, dass eine relativ große Fehlermeldung kommt und ich nicht genau weiß, was ich machen soll.

Wäre toll wenn ihr mir helfen könntet.

Mfg
 
Mein Problem ist nun, dass eine relativ große Fehlermeldung kommt und ich nicht genau weiß, was ich machen soll.
Die Fehlermeldung mit angeben wäre ein guter Anfang!

Im Prinzip hast du Recht, du solltest ihn nach deiner for-Schleife wieder schließen.

Ich vermute aber, dass dein Problem vielleicht gar nicht der Reader ist, sondern die parseInt-Methode. Du übergibst der nämlich jedes Mal einen leeren String. Laut doc (http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String)) dürftest du da eine NumberFormatException bekommen. Hier wäre es dann eben hilfreich, wenn wir die Fehlermeldung hätten...
 
Es erscheint die Fehlermeldung:

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at Highscore.<init>(Highscore.java:34)
	at Defender.actionPerformed(Defender.java:350)
	at javax.swing.Timer.fireActionPerformed(Unknown Source)
	at javax.swing.Timer$DoPostEvent.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$200(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.awt.EventQueue$3.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)

Ja stimmt. Dem Array werden leere Stringfelder übergeben ... aber wie änder ich das nun ?
 
Genau. Also die NumberFormatException hat nichts mit dem Reader zu tun. Den kannst du also problemlos nach der for-Schleife schließen.

Ändern tust du das, indem du in dem String zeile eine Zahl einträgst. Zum Beispiel, indem du eine Zeile aus deiner Textfile einliest mit BufferedReader.readLine(). Zum Testen kannst du auch bevor du parseInt aufrufst folgendes tun:
zeile=""+i;
 
Zurück