Highscore uitlezen en opslaan.

Status
Niet open voor verdere reacties.

timo0909

Gebruiker
Lid geworden
6 aug 2008
Berichten
9
Hoi,

Voor informatica heb ik de opdracht gekregen een vrij simpele applet te maken, dit is allemaal wel gelukt. Alleen loop ik op het probleem vast in verband met de score's van mensen opslaan.

Het opslaan van score's werkt, maar niet zoals ik het wil. In het .txt bestand slaat hij deze achter elkaar op, maar ik zou ze als het kan liever onder elkaar hebben, dit is wat ik voor dat stukje tot nu toe heb:

[JS]try {
BufferedWriter out = new BufferedWriter(new FileWriter("highscore.txt", true));
out.write(wiescore + "\n");
out.close();
} catch (IOException e) {
}[/JS]

Hij slaat dit dan bijvoorbeeld als volgt op: Timo 4Timo 1Timo 2

Voor het uitlezen van deze score's ben ik nog helemaal niks opgeschoten na een zoektocht van een uur of 2.

Zou iemand mij hiermee kunnen/willen helpen?

Alvast bedankt,
Timo
 
nieuwe code
[JS]
try {
BufferedWriter out = new BufferedWriter(new FileWriter("highscore.txt", true));
out.write(wiescore + "\n");
out.newLine();
out.close();
} catch (IOException e) {
}
[/JS]

method : newLine()
deze schrijft een nieuwe regel ;)
Bron : http://java.sun.com/j2se/1.4.2/docs/api/java/io/BufferedWriter.html

Byee VRC

kzal ff verder zoeken hoe je inleest
zie volgend post ;).
 
Laatst bewerkt:
voor het inlezen gebruik je FileReader.

[JS]
FileReader

public FileReader(String fileName)
throws FileNotFoundException

Creates a new FileReader, given the name of the file to read from.

Parameters:
fileName - the name of the file to read from
Throws:
FileNotFoundException - if the named file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading.
[/JS]

Met de methode read kan je inlezen.
je kan gebruik maken van de class java.io.InputStreamReader of van de class java.io.Reader

Bron : http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileReader.html#FileReader(java.lang.String)

Succes
Byee VRC
 
Laatst bewerkt:
Het zal dan zo moeten (dus zonder de \n in de write methode):

[JS]
try {
BufferedWriter out = new BufferedWriter(new FileWriter("highscore.txt", true));
out.write(wiescore);
out.newLine();
out.close();
} catch (IOException e) {
}
[/JS]

Dit had waarschijnlijk ook gewerkt maar newLine() is veiliger die schrijft hij altijd het juiste line termination karakter weg afhankelijk van het OS, zit je op linux?
[JS]
out.write(wiescore + "\r\n");
[/JS]
 
Laatst bewerkt:
Voor het inlezen van regel-gescheiden bestanden kan je het best een FileReader i.c.m. LineNumberReader gebruiken, deze heeft namelijk een readLine method waardoor je gemakkelijk per regel kan inlezen.
 
Alvast hartelijk bedankt voor jullie hulp :)

Ik maak trouwens gewoon gebruik van xp :)

Zit nu ondertussen voetbal te kijken, zal het morgen uittesten :p
 
Ik ben er inmiddels weer wat mee verder gegaan, de nieuwe score's op nieuwe regels werkt, was uiteindelijk ook niet zo moeilijk.
Wat mij nog wel problemen oplevert is het uitlezen. Heb verder zitten zoeken op google naar voorbeelden, maar kom er nog altijd niet helemaal uit. Is het trouwens ook mogelijk om de highscore's bij het uitlezen te laten sorteren op de score?
 
Dit zou moeten werken:
[JS]
LineNumberReader lineReader = null;
try {
lineReader = new LineNumberReader(new FileReader("highscore.txt"));
for(String line = null; (line = lineReader.readLine()) != null;) {
//Voeg hier toe aan collectie bijvoorbeeld TreeMap
System.out.println(line);
}
} finally {
try {
lineReader.close();
} catch (Exception e) {}
}
[/JS]

Je kan dan deze regel parsen (dus de highscore uitlezen) en deze bijvoorbeeld toevoegen aan een TreeMap, dan zijn je resultaten ook gelijk gesorteerd.

Je moet jezelf aanleren om Reader/Writers en InputStreams/OutputStreams altijd in een finally block te sluiten, dan weet je zeker dat je de boel netjes opruimt.
 
Laatst bewerkt:
Ik ben inmiddels alweer een stuk opgeschoten, de tekst wordt nu mooi opgehaald, alleen zit ik nu met de volgende error, waarover ik tot nu toe niks kan vinden op google:

The type of the right sub-expression, "java.util.Set", is not assignable to the variable, of type "java.lang.String".

[JS]try {
FileReader fileReader = new FileReader("highscore.txt");
LineNumberReader lineReader = new LineNumberReader(fileReader);
for(String line = null; (line = lineReader.readLine()) != null;) {
String [] linen = line.split(" ");
TreeMap hs = new TreeMap();
hs.put(linen[0], linen[1]);
//hotext.setText("Naam: " + linen[0] + " Aantal beurten over: " + linen[1]);
String plaats = hs.entrySet();
hotext.setText(plaats);
}
}[/JS]

Als ik de laatste 2 regels, de settext en de entryset weghaal, en het in een textarea laat plaatsen, krijg ik overigens ook maar 1 resultaat te zien.
 
Als je het zo doet dan heb je een gesorteerde lijst, je heb dan geen bubblesort nodig omdat de TreeMap automatisch sorteert:

[JS]
FileReader fileReader = new FileReader("highscore.txt");
LineNumberReader lineReader = new LineNumberReader(fileReader);

TreeMap hs = new TreeMap();
for(String line = null; (line = lineReader.readLine()) != null;) {
String [] linen = line.split(" ");

// Omgedraait, het eerste veld (de key) wordt gesorteerd
// Dus eerste highscore en dan de naam
hs.put(linen[1], linen[0]);
}

// Even laten zien dat het een gesorteerde verzameling is
for (Map.Entry entry : (Set<Map.Entry>) hs.entrySet()) {
System.out.println("naam: " + entry.getValue() + " - score: " + entry.getKey());
}
[/JS]
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan