1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Seltsames Problem beim Schreiben in Datei

  • java-girl
  • 17. Juni 2008 um 13:45
  • Unerledigt
  • java-girl
    14
    java-girl
    Mitglied
    Reaktionen
    7
    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

    There's no better place than 127.0.0.1!

  • Bug
    4
    Bug
    Mitglied
    Reaktionen
    1
    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.

    Viele Menschen sind zu gut erzogen, um mit vollem Mund zu sprechen,
    aber sie haben keine Scheu, es mit leerem Kopf zu tun.
    (Orson Welles)

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

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

    There's no better place than 127.0.0.1!

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern