Hiho,
will eine Datei löschen. File.delete() funktioniert aber nicht weil ich anscheinend die Datei irgendwo noch geöffnet/ oder ein Stream nicht geschlossen habe... Könnt ihr mir vllt. helfen? Muss den Kram Montag abgeben. Kann mich langsam nicht mehr Konzentrieren.
Need Help Guys ;(
will eine Datei löschen. File.delete() funktioniert aber nicht weil ich anscheinend die Datei irgendwo noch geöffnet/ oder ein Stream nicht geschlossen habe... Könnt ihr mir vllt. helfen? Muss den Kram Montag abgeben. Kann mich langsam nicht mehr Konzentrieren.
Need Help Guys ;(
Java:
package Highscore;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.net.URL;
import java.util.ArrayList;
/**
*
* @author Christian Brendes und Jacek Rzeniewicz CSVReader.java
*Die Klasse CSVReader ist dafür da, um Einträge aus der
*HighscoreData.csv Datei auszulesen und diese für die HighscoreTable aufzubereiten.
*/
public class CSVReader {
// public String csvfile = "D:\\Schule\\Programmierung\\Java\\Timer_Highscore\\src\\Highscore\\highscoreData.csv";
public String csvfile = "D:/Schule/Programmierung/Java/Timer_Highscore/src/Highscore/highscoreData.csv";
URL myurl = this.getClass().getResource("res/test_1.csv");
// Arrays für die jeweiligen Level werden erstellt
private Object[][] easyList;
private Object[][] mediumList;
private Object[][] hardList;
private Object[][] infernalList;
private String[] split;
/**
*Beim Aufruf des CSVReader Objektes wird gleichzeitig die csv-Datei geladen.
*/
public CSVReader() {
loadFile(csvfile);
}
/**
* Prueft ob ein aktueller Wert in der Highscoreliste
* @param url
* @param level
* @param score
*/
public void checkMaxEntry(String url, String level, Integer newScore, String newName) {
ArrayList<Integer> checkMax = searchArrayMax(csvfile);
File oldCSV = new File("D:/Schule/Programmierung/Java/Timer_Highscore/src/Highscore/highscoreData.csv");
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);
in.close();
//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]);
in.close();
// HighscoreDatei loschen
deleteOldHighscore(oldCSV);
} catch (IOException e) {
e.printStackTrace();
}
}else {
writeFile(csvfile, level, newName, newScore.toString());
}
}
/**
* searchArrayMax wird benötigt um die gesamten Einträge eines jeweiligen Levels zu berechnen.
* Die wird für die maximale Arraygröße benötigt.
* @param url
* @return
*/
public ArrayList<Integer> searchArrayMax(String url) {
ArrayList<Integer> myLevelCount = new ArrayList<Integer>();
try {
BufferedReader in = new BufferedReader(new FileReader(url));
String zeile = null;
Integer lineCounter = 0;
Integer easyC = 0;
Integer mediumC = 0;
Integer hardC = 0;
Integer infernalC = 0;
while ((zeile = in.readLine()) != null) {
lineCounter++;
// System.out.println("Gelesene Zeile:"+lineCounter+" "+zeile);
split = zeile.split(";");
if (split[0].equals("EASY")) {
easyC++;
} else if (split[0].equals("MEDIUM")) {
mediumC++;
} else if (split[0].equals("HARD")) {
hardC++;
} else if (split[0].equals("INFERNAL")) {
infernalC++;
}
}
myLevelCount.add(easyC);
myLevelCount.add(mediumC);
myLevelCount.add(hardC);
myLevelCount.add(infernalC);
} catch (IOException e) {
e.printStackTrace();
}
return myLevelCount;
}
/**
* loadFile lädt die Highscoreeinträge aus der CSV-Datei und speichert sie in dem dazugehörigem LevelArray.
* @param url
*/
public void loadFile(String url) {
try {
BufferedReader in = new BufferedReader(new FileReader(url));
String zeile = null;
// Da wir die maximalen Einträge eines Levels wissen wollen, wurden Counter angelegt
int easyCount = 0;
int mediumCount = 0;
int hardCount = 0;
int infernalCount = 0;
// searchArrayMax wir einem Array hinzugefügt mit man danach die einzelnen maximalen Leveleinträge erhalten.
ArrayList<Integer> maxCounts = searchArrayMax(url);
Integer easyObj = (Integer) maxCounts.get(0);
Integer mediumObj = (Integer) maxCounts.get(1);
Integer hardObj = (Integer) maxCounts.get(2);
Integer infernalObj = (Integer) maxCounts.get(3);
/* Die LevelArray werden mit der richtigen Größe erstellt. Die zweite Dimension hat nur eine Größe von 2,
* weil dort nur ein String Name und Integer Score benötigt.
*/
easyList = new Object[easyObj][2];
mediumList = new Object[mediumObj][2];
hardList = new Object[hardObj][2];
infernalList = new Object[infernalObj][2];
//Datei wird Zeilenweise eingelsen
while ((zeile = in.readLine()) != null) {
// System.out.println("Gelesene Zeile: " + zeile);
//Eingelesener String wird nach einem Semikolon getrennt.
split = zeile.split(";");
/*Eingelesene Zeilen werden nach Level untersucht. Dies ist der Erste Eintrag,
* der Zweite ist der Name und der Dritte ist die Punktzahl.
*/
if (split[0].equals("EASY")) {
easyList[easyCount][0] = split[(1)];
easyList[easyCount][1] = new Integer(split[(2)]);
easyCount++;
} else if (split[0].equals("MEDIUM")) {
mediumList[mediumCount][0] = split[1];
mediumList[mediumCount][1] = new Integer(split[2]);
mediumCount++;
} else if (split[0].equals("HARD")) {
hardList[hardCount][0] = split[1];
hardList[hardCount][1] = new Integer(split[2]);
hardCount++;
} else if (split[0].equals("INFERNAL")) {
infernalList[infernalCount][0] = split[1];
infernalList[infernalCount][1] = new Integer(split[2]);
infernalCount++;
}
}
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void deleteOldHighscore( File file){
// System.out.println(file.);
if(file.exists()){
file.delete();
System.out.println("File deleted");
}
}
public void lineReplace(String myurl, String level, String newName, String newTime, Integer[][] sortedList) {
File oldCSV = new File("D:/Schule/Programmierung/Java/Timer_Highscore/src/Highscore/highscoreData.csv");
String csvFileName = "highscoreData.csv";
String tempFile = "D:\\Schule\\Programmierung\\Java\\Timer_Highscore\\src\\Highscore\\tmpFile.csv";
Integer replaceLine = sortedList[0][0];
Integer lineCounter = 0;
BufferedWriter tmpFW;
try {
BufferedReader in = new BufferedReader(new FileReader(myurl));
tmpFW = new BufferedWriter(new FileWriter(tempFile, true));
String zeile = null;
//Ersetzt folgende replaceLine mit neuer Zeile
while ((zeile = in.readLine()) != null) {
tmpFW.write(zeile);
tmpFW.newLine();
lineCounter++;
System.out.println("----"+lineCounter+"----"+zeile);
if (lineCounter == replaceLine-1){
zeile = in.readLine();
}
}
tmpFW.write(level.toUpperCase()+";"+newName+";"+newTime);
tmpFW.newLine();
tmpFW.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* writeFile schreibt einen Highscoreeintrag in die Highscoredatei.
* Dieser Eintrag sieht wie folgt aus: Level;Name;Time\n
* @param myurl
* @param level
* @param name
* @param time
*/
public void writeFile(String myurl, String level, String name, String time) {
Writer f1;
BufferedWriter f2;
try {
f1 = new FileWriter(myurl, true);
f2 = new BufferedWriter(f1);
f2.write(level.toUpperCase() + ";" + name + ";" + time);
f2.newLine();
f2.close();
f1.close();
} catch (IOException e) {
System.out.println("Fehler beim Anhängen der Datei");
}
}
/**
* Gibt das zweidimensionale-Object-Array easyList zurück.
* @return
*/
public Object[][] getEasyList() {
return easyList;
}
/**
* Gibt das zweidimensionale-Object-Array mediumList zurück.
* @return
*/
public Object[][] getMediumList() {
return mediumList;
}
/**
* Gibt das zweidimensionale-Object-Array hardList zurück.
* @return
*/
public Object[][] getHardList() {
return hardList;
}
/**
* Gibt das zweidimensionale-Object-Array infernalList zurück.
* @return
*/
public Object[][] getInfernalList() {
return infernalList;
}
public static void main(String args[]) {
CSVReader r = new CSVReader();
// r.writeFile(r.csvfile, "HARD", "hgg", "27183");
r.checkMaxEntry(r.csvfile, "HARD", new Integer(22), "Slowenien");
}
}