FileReader / FileWriter / BufferedWriter An einer bestimmten Zeile String ersetzten

Burny91

Mitglied
Hi Leute,

arbeite gerade an einem Highscore. Die Daten dafür speichere ich in einer CSV-Datei. Diese sind nach folgendem Schema aufgebaut: LEVEL;NAME;SCORE\n

In meiner Methode lineReplace will ich den größten Eintrag von den 10 in der CSV Datei durch einen neuen, kleineren Wert ersetzen. SortedList gibt mir an Stelle [0][0] die Zeile in der CSV-Datei an welcher sich der Eintrag mit dem größten Wert befindet. Wenn ich nun die Methode ausführe, löscht er die kompletten Einträge in meiner CSV-Datei. Wie kommt das?

Kann man nicht gleichzeitig eine Datei einlesen und an einer bestimmten Zeile etwas ändern??

Need help 🙁
Java:
public void lineReplace(String myurl, String level, String newName, String newTime, Integer[][] sortedList) {
		Integer replaceLine = sortedList[0][0]; // Gibt mir Zeile 7 an -> Bei dem Wert 222357
		Integer lineCounter = 0;
		Writer f1;
		BufferedWriter f2;
		try {
			f1 = new FileWriter(myurl);
			f2 = new BufferedWriter(f1);
			BufferedReader in = new BufferedReader(new FileReader(myurl));
			String zeile = null;

			//Ersetzt folgende replaceLine mit neuer Zeile
			while ((zeile = in.readLine()) != null) {
				lineCounter++;
				if (zeile.equals(replaceLine)){
					f2.write(level.toUpperCase() + ";" + newName + ";" + newTime);
				} else{
					f2.close();
					f1.close();
				}
			}

			f2.close();
			f1.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

Java:
public void checkMaxEntry(String url, String level, Integer newScore, String newName) {
		ArrayList<Integer> checkMax = searchArrayMax(csvfile);

		Integer entryCounter = 0;
		Integer lineCounter = 0;
		Integer size;
		if (level.equals("EASY")) {
			size = checkMax.get(0);
		} else if (level.equals("MEDIUM")) {
			size = checkMax.get(1);
		} else if (level.equals("HARD")) {
			size = checkMax.get(2);
		} else {
			size = checkMax.get(3);
		}

		/*Wenn 10 Leveleintraege getan wurden, wird ueberprueft ob der neue Wert
		 * besser ist als der schlechteste der Highscoreliste
		 */
		if (size.equals(10)){
			Integer[][] levelEntries = new Integer[size][2];

			try {
				BufferedReader in = new BufferedReader(new FileReader(url));
				String zeile = null;

				//Es wird nach allen 10 Eintraegen des jeweiligen Levels gesucht
				while ((zeile = in.readLine()) != null) {
//					System.out.println("Gelesene Zeile: " + zeile);
					lineCounter++;
					split = zeile.split(";");
					
					if (split[0].equals(level)) {
						levelEntries[entryCounter][0] = lineCounter;
						levelEntries[entryCounter][1] = new Integer(split[(2)]);
						entryCounter++;
					}
				}
				//
				Bubblesort mySortetArray = new Bubblesort();
				Integer[][] sortedLevelEntries = mySortetArray.bubbleSort(levelEntries);
				
				//Neuer Eintrag wird an der Stelle des Schlechtesten ueberschrieben
				if (sortedLevelEntries[0][1] > newScore){
					lineReplace(url, level, newName, newScore.toString(), sortedLevelEntries);
					
				//Ist der Wert schlechter erhaelt man keinen Eintrag in die Highscoreliste 
				}else{
					System.out.println("Sorry zu schlecht!");
				}
				
				System.out.println("sortierteListe Eintrag [0][0]"+sortedLevelEntries[0][0]);
				
			} catch (IOException e) {
				e.printStackTrace();
			}
		}else {
			writeFile(csvfile, level, newName, newScore.toString());
		}
		
	}

Java:
public static void main(String args[]) {
		CSVReader r = new CSVReader();
		r.checkMaxEntry(r.csvfile, "HARD", new Integer(22), "Slowenien");
	}

Hier meine CSV-Datei:
Java:
HARD;Japan;99
HARD;Japan;99
HARD;China;2223
HARD;Polen;23223
HARD;Spanien;1111
HARD;Frankreich;55544
HARD;Madrid;222357
HARD;Oesterreich;9000
HARD;Ungarn;32323
HARD;Romaenien;8877
 
Zuletzt bearbeitet:

Zurück
Oben