Zeile innerhalb Datei überschreiben

epiTR

Mitglied
Hey,
Ich möchte eine Datei mit dem Namen "Highscore" anlegen. Jedoch muss der Wert "gewonnen" bzw. "verloren" nach jedem Spiel geändert werden. Nun leider verstehe ich momentan einfach nicht wieso mein Sourcecode nicht klappt.
Ich bedanke mich schon einmal für jegliche Hilfe!

Datenordnung innerhalb der Datei:
Name(Win|Lose)
Max(0|1)
Peter(1|0)
...

Strukogramm:
structo.png

Die Klasse zum auslesen und schreiben der Datei.
Java:
package common;

import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;

public class FileHighscore {

	private String filedir;
	//variables for name, win & loose (only 255!)
	private String name[] = new String[255];
	private String win[] = new String[255];
	private String lose[] = new String[255];
	//all different value separators
	private final int POINT_SEP_A = 40; 	// ASCII for (
	private final int POINT_SEP_B = 41; 	// ASCII for )
	private final int DATA_SEP = 124;   	// ASCII for |
	private final int ENTER = 13;     		// ASCII for enter
	private int handle = -1; 				//it shows the current array
	
	public FileHighscore(String hFileDir) {
		filedir = hFileDir;
	}//end Constructor

	public void read(){
		final int LINEFEED = 10; 	// enter + line feed is new Line
		final int EOF = -1;     	// end of file
		
		int dmy = -2; 				// to read the file
		String dmyStr = "";  		// collect the letters of a value
		
		FileInputStream fis = null; // file handle
		boolean ready = false;      // loop control variable
		int counter = 1;
		
		//open the file:
		//==============
			try{
				fis = new FileInputStream(filedir);
			}catch(FileNotFoundException ex){
				System.out.println("ERROR 1: File not found => PRG-Stop");
			}catch(Exception ex){
				System.out.println("ERROR 2: An unexpected error occurred => PRG-Stop: \n" + ex.toString());
			}//try
			
		//File read out:
		//==============
			do{
				try{
				dmy = fis.read();
				}catch(Exception ex){
					System.out.println("ERROR 3: Unexpected error while read => PRG-Stop:\n"+ ex.toString() );
					System.exit(0);
				}//try catch
				
				if(dmy == POINT_SEP_A || dmy == DATA_SEP || dmy == POINT_SEP_B){
					//store dmyStr into his variable
					if(handle <= 254){
						switch(counter){
						case 1: name[++handle] = dmyStr; 	counter++; 	 break;
						case 2: win[handle]	   = dmyStr; 	counter++; 	 break;
						case 3: lose[handle]   = dmyStr; 	counter = 1; break;
						}//switch
						System.out.println(name[handle] + win[handle] + lose[handle]);
						dmyStr = "";//reset dmyStr
					}
				}else if(dmy == ENTER || dmy == LINEFEED){
					//doing nothing
				}else if(dmy == EOF){
					ready = true;//exit loop
				}else{
					//complete the value
					dmyStr += (char)dmy;
				}//if
			}while(ready == false);
	}//end read (method)

	
	public void write(String hName, boolean hWin){
		FileWriter fwriter;
		BufferedWriter out;
		String inhalt = "";
		
		read();
		clearData();
		
		try{
			fwriter = new FileWriter(filedir, true);
			out = new BufferedWriter(fwriter);
			
			if(getHandle() != -1){
				for(int i=0; i<=getHandle(); i++){
					inhalt = "";
					if(name[i].equals(hName)){
						inhalt = hName + "(1|1)";//overwrite
					}else{
						inhalt = name[i] + (char)POINT_SEP_A + win[i] + (char)DATA_SEP + lose[i] + (char)POINT_SEP_B;
					}//if
					out.write(inhalt);
					out.newLine();
				}//for
			}else{
				inhalt = hName + (char)POINT_SEP_A + "00" + (char)DATA_SEP + "00" + (char)POINT_SEP_B;
				out.write(inhalt);
				out.newLine();
			}//if
			
			out.close();
			
		}catch(FileNotFoundException ex){
			System.out.println("ERROR 4: File not found => PRG-Stop");
		}catch(Exception ex){
			System.out.println("ERROR 5: An unexpected error occurred => PRG-Stop: \n" + ex.toString());
		}//try
		
		/*
//		inhalt = hName + (char)POINT_SEP_A + hWin + (char)DATA_SEP + hLose + (char)POINT_SEP_B;
		
		//open the file and write into it:
		//================================
		try{
			fwriter = new FileWriter(filedir, true);
			out = new BufferedWriter(fwriter);
			
			if(getHandle() > 0){
				for(int i=0; i<getHandle()-1; i++){
					inhalt = "";
					if(name[i].equals(hName)){
						inhalt = hName + "(0|10)";
					}else{
						inhalt = hName + (char)POINT_SEP_A + hWin + (char)DATA_SEP + "lose" + (char)POINT_SEP_B;
					}//if
					System.out.println("Handle: " + handle + " - "+ getHandle() +  " - i: " + i);
					out.write(inhalt);
					out.newLine();
				}//for
			}else{
				inhalt = hName + (char)POINT_SEP_A + hWin + (char)DATA_SEP + "lose" + (char)POINT_SEP_B;
				out.write(inhalt);
				out.newLine();
			}//if
			
			out.close();
			
		}catch(FileNotFoundException ex){
			System.out.println("ERROR 4: File not found => PRG-Stop");
		}catch(Exception ex){
			System.out.println("ERROR 5: An unexpected error occurred => PRG-Stop: \n" + ex.toString());
		}//try*/
	}//end write (method)
		





	
	public String getName(int hLine){
		if(handle == 0){//this checks if there is any data inside the file
			return("no data inside the file");
		}else{
			return name[hLine-1];
		}
	}//end getName
	
	
	public String getWin(int hLine){
		if(handle == 0){//this checks if there is any data inside the file
			return("no data inside the file");
		}else{
			return win[hLine-1];
		}
	}//end getWin
	
	
	public String getLose(int hLine){
		if(handle == 0){//this checks if there is any data inside the file
			return("no data inside the file");
		}else{
			return lose[hLine-1];
		}
	}//end getLoose
	
	public int getHandle(){
		return handle;
	}//end getHandle
	
	public void clearData(){
		FileWriter fwriter;
		BufferedWriter out;
		//open the file and clears it:
		//================================
				try{
					fwriter = new FileWriter(filedir, false);
					out = new BufferedWriter(fwriter);
					//write new (and old) things into file
					/*for(int i=1; i<=handle; i++){
						inhalt += "\n";
						inhalt += getName(i) + (char)POINT_SEP_A + getWin(i) + (char)DATA_SEP + getLoose(i) + (char)POINT_SEP_B;//old data
					}//for*/
					out.write("");
					out.close();
				}catch(FileNotFoundException ex){
					System.out.println("ERROR 4: File not found => PRG-Stop");
				}catch(Exception ex){
					System.out.println("ERROR 5: An unexpected error occurred => PRG-Stop: \n" + ex.toString());
				}//try	
	}//end clearData (method)
	
}//end FileHighscore (class)
 

tagedieb

Top Contributor
Nun leider verstehe ich momentan einfach nicht wieso mein Sourcecode nicht klappt.

Was erwartest du denn fuer ein Ergebnis? Ohne zu Wissen was nicht klappt ist die Fehlersuche schon mal zum Scheitern verdammt :)


Beim ueberfliegen deines Code sind mir folgende Sachen aufgefallen:

1. in der read() Methode wird der handle nicht zurueckgesetzt. D.h. jedesmal wenn read() aufgerufen wird, wird der Handle zum derzeitigen Wert hinzugefuegt. Ergo, dein Code funktioniert nur, wenn du sicherstellst, dass read() nur einmal aufrufen wird oder jedesmal ein neues FileHighScore Objekt erstellst.

Derzeit wird beim mehrmaligen Aufrufen der write(..) Methode dein Handle immer groesser auch wenn du nur bestehende Spieler updaten willst.

2. Neue Spieler werden nur hinzugefuegt, wenn die Datei leer ist (handle = -1)

3. Die Werte fuer win und loose werden niergends aktualisiert

4. String + String sollte durch einen StringBuilder ersetzt werden, da sonst jedesmal ein neues String Object erstellt wird

5. In Java sollte man textfiles lieber Zeilenweise auslesen. Dann kannst du dir auch Abfragen nach EOL und EOF sparen. Dein Code scheint mir eher aus der C Ecke zu kommen

6. Einlesen tust du mit InputStream und schreiben mit Writer. Du solltest das nicht mixen. Entweder fuer beides Streams oder fuer beisen Reader/Writer verwenden.

7. Konstanten kannst du gleich in char definiert. Z.b.
Code:
private final char POINT_SEP_A = '(';
Gut zu programmieren heisst nicht, es moeglichst Unleserlich darzustellen. Das ist Java und nicht C ;-)


So genug gemeckert.
Hope this helps
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I ArrayList erstellen innerhalb einer Zeile? Java Basics - Anfänger-Themen 3
Glühlampe Usereingabe in der gleichen Zeile ausgeben Java Basics - Anfänger-Themen 6
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
padde479 Zeile entfernen TableModel Java Basics - Anfänger-Themen 11
F Arraylist<String>Ein Wort pro Zeile Java Basics - Anfänger-Themen 6
G Compiler-Fehler Fehler in Zeile 1 beheben, wie? Java Basics - Anfänger-Themen 9
I Wortkette in umgekehrter Rheinfolge + in neuer Zeile ausgeben Java Basics - Anfänger-Themen 4
W String einer Textdatei in einzelne Stringobjekte pro Zeile aufteilen Java Basics - Anfänger-Themen 14
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
S Variablen Letzte Zeile eines Strings entfernen Java Basics - Anfänger-Themen 1
LFB In einer For-Schleife alles in einer Zeile ausgeben Java Basics - Anfänger-Themen 14
javapingu Jeglichen Inhalt einer Textdatei nach Zeile n löschen Java Basics - Anfänger-Themen 8
S Zufällige ungerade Zeile aus Text-Datei lesen Java Basics - Anfänger-Themen 5
G JTable, Zeile auswählen und Ergebnis an Schaltfläche übergeben Java Basics - Anfänger-Themen 4
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
dieter000 Wie schreibe ich diese ZEile um? Java Basics - Anfänger-Themen 1
crrnogorka Letzte Zeile einer Tabelle "überschreibt" alle anderen Zeilen Java Basics - Anfänger-Themen 1
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
P Welche Zeile in Tadople gibt einen compiler error? Java Basics - Anfänger-Themen 5
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
S Gesamten String in einer Zeile ausgeben Java Basics - Anfänger-Themen 2
J ObjectOutputStream writeChars, komische Zeichen nur in 1. Zeile Java Basics - Anfänger-Themen 2
T Was macht diese Zeile? Java Basics - Anfänger-Themen 9
A Jede x-te Zeile, lösche 10 Zeilen Java Basics - Anfänger-Themen 9
L Tiefe Kopie einer Zeile eines zweidimensionalen Arrays Java Basics - Anfänger-Themen 1
B Code Zeile unklar Java Basics - Anfänger-Themen 9
ruutaiokwu Ausgegebene Zeile ersetzen mit neuem Text Java Basics - Anfänger-Themen 3
F Zeile in Ordner Java Basics - Anfänger-Themen 4
jaleda100 JTextArea Zeile einfügen Java Basics - Anfänger-Themen 1
M BufferedReader neue Zeile nach Knopfdruck Java Basics - Anfänger-Themen 9
F Mehrere Zeilen zu einer Zeile zusammenfügen und in eine Datei schreiben Java Basics - Anfänger-Themen 1
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
C Java liest nur eine Zeile ein Java Basics - Anfänger-Themen 3
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
B Wieso wird die Zeile "column" genannt und die Spalte "line"? Java Basics - Anfänger-Themen 12
S BufferedReader nächste Zeile lesen Java Basics - Anfänger-Themen 4
M Zeile in datei überschreiben Java Basics - Anfänger-Themen 5
S drawString() neue Zeile Java Basics - Anfänger-Themen 4
D Falsche Zeile wird in JTable gelöscht Java Basics - Anfänger-Themen 6
D JTable Zeile wird nicht in MySQL gelöscht Java Basics - Anfänger-Themen 16
J Durchschnitt jeder Zeile und und Spalte in einem 2D Arrays berechnen Java Basics - Anfänger-Themen 6
W String in einer Zeile mit Alphabet füllen? Java Basics - Anfänger-Themen 8
snipesss [Java] Schriftart und Schriftgröße von JLabel in einer Zeile festlegen? Java Basics - Anfänger-Themen 3
H Variablen Zeile aus einem ResultSet ausleesen Java Basics - Anfänger-Themen 7
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
R Ab einer bestimmten Zeile lesen Java Basics - Anfänger-Themen 3
T Zeilen des ListArray nach einem Wort durchsuchen und diese Zeile ausgeben Java Basics - Anfänger-Themen 4
C Datentypen Zeile aus mehrdimensionalem Array extrahieren uns abspeichern Java Basics - Anfänger-Themen 6
B FileInputStream entpacken und Zeile für Zeile entpacken Java Basics - Anfänger-Themen 1
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
S Zeile entfernen aus JTable Java Basics - Anfänger-Themen 15
S In JTable Zeile selektieren mit Mausklick Java Basics - Anfänger-Themen 16
D Datenbankzugriff - Leere Zeile einfügen Java Basics - Anfänger-Themen 2
G zeichen einer Zeile löschen Java Basics - Anfänger-Themen 4
F Zeile bei JTable hinzufügen Java Basics - Anfänger-Themen 6
A CSV datei eine Bestimmte Zeile ansprechen Java Basics - Anfänger-Themen 1
J Input/Output Zeile in Textdatei ändern Java Basics - Anfänger-Themen 14
S Java CSV, er nimmt die nächste Zeile nicht Java Basics - Anfänger-Themen 2
A Heap Space Error bei rekursiver Suche in Dateien trotz nur einer Zeile im Speicher Java Basics - Anfänger-Themen 26
G Zeile charweise lesen Java Basics - Anfänger-Themen 3
Ananaskirsche Input/Output Bestimmte Zeile aus Datei einlesen Java Basics - Anfänger-Themen 4
G Leere Zeile lesen Java Basics - Anfänger-Themen 12
G zeile: Was bedeutet das in der Methode? Java Basics - Anfänger-Themen 4
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
T Textdatei Zeile löschen? Java Basics - Anfänger-Themen 4
C Input/Output Hilfe..txt Datei zeile verändern und Ausgabe ..Hilfe Java Basics - Anfänger-Themen 11
N Bestimmte Zeile aus einer Datei auslesen Java Basics - Anfänger-Themen 10
L Ansprechung der x'ten Zeile in Arrays Java Basics - Anfänger-Themen 10
S Textdatei lesen, Methode gibt nur die letzte Zeile aus. Warum? Java Basics - Anfänger-Themen 5
G JTable: Inhalt einer selektierten Zeile speichern Java Basics - Anfänger-Themen 2
J Neue Zeile an bestimmter Stelle in Textdatei einfügen Java Basics - Anfänger-Themen 2
N Erste Zeile bei BufferedReader doppelt lesen? Java Basics - Anfänger-Themen 2
I .txt Datei Zeile löschen. Java Basics - Anfänger-Themen 13
B Geschwindigkeitsabhängigkeit von Anz. d. Operatoren pro Zeile Java Basics - Anfänger-Themen 12
D Bestimmte Zeile aus TXT Datei ausgeben Java Basics - Anfänger-Themen 4
H Input/Output JTextArea einzelne Zeile auslesen Java Basics - Anfänger-Themen 6
Rayo Lese Zahl in Zeile x aus Spalte y ein! Java Basics - Anfänger-Themen 36
T Erste Schritte Ende von Wörtern in einer Zeile feststellen? Java Basics - Anfänger-Themen 5
N User Eingabe mit Zeile aus TextFile vergleichen Java Basics - Anfänger-Themen 13
L warum werden nicht die neuen Point Daten der Zeile 25 beim ausprinten Zeile 28 übernommen ? Java Basics - Anfänger-Themen 8
Kenan89 Bestimmte Zeile in txt-Datei ersetzen Java Basics - Anfänger-Themen 4
G Bitte um Erklärung dieser einer Zeile Java Basics - Anfänger-Themen 5
D Input/Output bestimmte Zeile auslesen Java Basics - Anfänger-Themen 3
G Ausgabe nach 5 Zeichen in neue Zeile schreiben??? Java Basics - Anfänger-Themen 12
H Zeile aus Textdatei lesen und in Textfield schreiben Java Basics - Anfänger-Themen 4
B Erste Schritte Kosolennanwenung nur eine Zeile Java Basics - Anfänger-Themen 9
W letzte Zeile aus wachsender Textdatei auslesen Java Basics - Anfänger-Themen 5
S Itext und eine neue Zeile einfügen Java Basics - Anfänger-Themen 2
B Aus Text Zeile einen String herauslesen Java Basics - Anfänger-Themen 11
W Eingabe und Ausgabe in eine Zeile Java Basics - Anfänger-Themen 4
Corben Input/Output FileOutputStream - neue Zeile mit write(10) Java Basics - Anfänger-Themen 6
K Erste Schritte Array mit 3 werte in eine Zeile -- Hilfe! Java Basics - Anfänger-Themen 2
G Was bedeutet diese Zeile? Java Basics - Anfänger-Themen 2
P Kann Ziffer die am Ende einer Zeile steht (.txt) nicht in int übersetzen Java Basics - Anfänger-Themen 11
F In der Zeile des Ausführers bleiben? Java Basics - Anfänger-Themen 6
A InputStream gibt nur jede 2te Zeile aus Java Basics - Anfänger-Themen 7
J Jede Zeile der Textdatei in ListUI eintragen Java Basics - Anfänger-Themen 2
A OOP Arraybefüllung mit for-Schleifen Problem: Umsprung in die zweite Zeile Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben