Hallo!
Ich habe vor geraumer Zeit eine Klasse geschrieben, welche eine Highscore CEASAR-verschlüsselt in eine Datei speichert. Das hat problemlos funktioniert. Das wollte ich auch auf eine andere Highscore-Liste anwenden, die allerdings anders ausschaut.
Das hab' ich dann auch gemacht, und seltsamerweise wurden die Buchstaben 'h', 'i', 'n' und 'a' in der Datei als Fragezeichen angezeigt und ergaben beim Auslesen Kästchen (ASCII-Wert 63 laut Ausgabe). Dass es an den Zeichen liegt, kann nicht sein, da bei der anderen Liste diese Zeichen problemlos dargestellt werden. Am Auslesen kann es auch nicht liegen, da ja die Zeichen in der Datei bereits falsch angezeigt werden.
Also erst einmal die Version die funktioniert:
public void save(){
try{
FileOutputStream writer = new FileOutputStream(FILENAME);
for(int i = 0; i < name.length(); i++){
writer.write(name.charAt(i)+KEY);
}
writer.write(SEPARATOR + KEY);
String a = Integer.toString(clicks);
for(int i = 0; i < a.length(); i++){
writer.write(a.charAt(i)+KEY);
}
writer.write(SEPARATOR + KEY);
a = Integer.toString(year);
for(int i = 0; i < a.length(); i++){
writer.write(a.charAt(i)+KEY);
}
writer.write(SEPARATOR + KEY);
a = Integer.toString(month);
for(int i = 0; i < a.length(); i++){
writer.write(a.charAt(i)+KEY);
}
writer.write(SEPARATOR + KEY);
a = Integer.toString(day);
for(int i = 0; i < a.length(); i++){
writer.write(a.charAt(i)+KEY);
}
writer.write(SEPARATOR + KEY);
a = Integer.toString(hour);
for(int i = 0; i < a.length(); i++){
writer.write(a.charAt(i)+KEY);
}
writer.write(SEPARATOR + KEY);
a = Integer.toString(minute);
for(int i = 0; i < a.length(); i++){
writer.write(a.charAt(i)+KEY);
}
writer.write(SEPARATOR + KEY);
writer.close();
}
catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args){
Record r = new Record();
r.set("Christina", 8, 2008, 1, 1, 1, 1);
r.save();
}
Alles anzeigen
(bitte nicht über die Codewiederholung motzen).
Die Datei sieht dann folgendermaßen aus:
Und nun die Version, die nicht funktioniert:
public HighscoreList(String difficulty){
list= new Highscore[LENGTH];
setFilename("abb/" + difficulty + ".abb");
for(int i = 0; i < list.length; i++){
list[i]=new Highscore("Christina", 1, 2008, 6, 6, 10000);
}
}
private void save(){
try{
writer = new FileWriter(filename);
int i = 0;
for(Highscore h : list){
writeString(Integer.toString(h.getScore()));
writer.write(SEPARATOR + KEY);
writeString(Integer.toString(h.getYear()));
writer.write(SEPARATOR + KEY);
writeString(Integer.toString(h.getMonth()));
writer.write(SEPARATOR + KEY);
writeString(Integer.toString(h.getDay()));
writer.write(SEPARATOR + KEY);
writeString(Long.toString(h.getTime()));
writer.write(SEPARATOR + KEY);
writeString(h.getName());
writer.write(SEPARATOR + KEY);
if(i < LENGTH-1){
writer.write('\n');
}
i++;
}
writer.close();
}
catch(IOException e){
}
}
private void writeString(String s){
try{
for(int i = 0; i < s.length(); i++){
int c = s.charAt(i) + KEY;
System.out.print(c);
writer.write(c);
}
System.out.println();
}
catch(IOException e){
}
}
public static void main(String[] args){
HighscoreList h = new HighscoreList("Easy");
h.save();
}
Alles anzeigen
Die Datei sieht dann so aus:
a¬b``h¬f¬f¬a````¬s?¢?£¤???¬
a¬b``h¬f¬f¬a````¬s?¢?£¤???¬
a¬b``h¬f¬f¬a````¬s?¢?£¤???¬
a¬b``h¬f¬f¬a````¬s?¢?£¤???¬
a¬b``h¬f¬f¬a````¬s?¢?£¤???¬
a¬b``h¬f¬f¬a````¬s?¢?£¤???¬
a¬b``h¬f¬f¬a````¬s?¢?£¤???¬
a¬b``h¬f¬f¬a````¬s?¢?£¤???¬
a¬b``h¬f¬f¬a````¬s?¢?£¤???¬
a¬b``h¬f¬f¬a````¬s?¢?£¤???¬
KEY ist bei beiden 48, SEPARATOR ebenfalls bei beiden das Zeichen '|'.
Die Testausgabe beim zweiten Programm war ok, also liegt es wirklich am Schreibvorgang in die Datei.
TIA