1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Seltsames Problem beim Schreiben in Datei

  • java-girl
  • 17. Juni 2008 um 13:45
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • java-girl
    Punkte
    2.037
    Beiträge
    357
    • 17. Juni 2008 um 13:45
    • #1

    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:

    Code
    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:

    Code
    s˜¢™£¤™ž‘¬h¬b``h¬a¬a¬a¬a¬

    Und nun die Version, die nicht funktioniert:

    Code
    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:

    Code
    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

  • Bug
    Punkte
    121
    Beiträge
    23
    • 17. Juni 2008 um 14:03
    • #2

    FileWriter is meant for writing streams of characters. For writing streams of raw bytes, consider using a FileOutputStream.

  • java-girl
    Punkte
    2.037
    Beiträge
    357
    • 17. Juni 2008 um 14:10
    • #3

    Vielen Dank, das hatte ich total übersehen! :)

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum