.txt Datei in .jar Datei speichern

Hallo,
ich würde gerne einen Highscore in ein Spiel implementieren, der auch erhalten bleibt, wenn ich das Programm schließe. Ich habe das mit einer .txt Datei gelöst:
Java:
package com.company;

import java.io.*;
import java.util.Scanner;

public class SpeicherVorgang
{
    private static File file;
    private static StringBuilder sb = new StringBuilder();

    public static void writeHighscoreToFile () throws IOException
    {
        //Datei erstellen in die gespeichert wird
        file = new File("src/gfx/SpielDaten.txt");
        if (!file.exists()) {
            file.createNewFile();
        }

        //Stringbuffer löschen, falls da noch was drin steht
        sb.delete(0, sb.length());

        //Variablen in den Stringbuffer speichern
        sb.append(Integer.toString(Highscore.value));
        sb.append("\n");

        //Stringbuffer in die file schreiben
        OutputStream stream = new FileOutputStream(file);
        stream.write(sb.toString().getBytes());
        stream.close();

    }

    public static void readHighscoreFromFile () throws IOException
    {
        //Datei laden die gelesen werden soll
        file = new File("src/gfx/SpielDaten.txt");
        Scanner sc = new Scanner(file);

        //Überprüfen ob was in der Datei drin steht (praktisch für Schleifen)
        if(sc.hasNext()){
            //Über sc.nextLine() kann man alles lesen was in der nächsen Zeile steht
            Highscore.value = Integer.valueOf(sc.nextLine());
        }

        sc.close();
       
    }

}
Wenn ich das Projekt allerdings mit Eclipse in eine .jar Datei exportiere, funktioniert zwar alles, aber der Highscore wird beim Schließen nun nicht mehr gespeichert. Was muss ich spezielles beachten, damit der Highscore auch in einer .jar Datei funktioniert?
 
K

kneitzel

Die jar Datei ist zur Laufzeit read only. Sieh es als Executable an - und das veränderst Du zur Laufzeit auch nicht!

Also speicher die Datei lieber ins Userverzeichnis (System.getProperty("user.home");) bzw. ein Unterverzeichnis da.
 
Die jar Datei ist zur Laufzeit read only. Sieh es als Executable an - und das veränderst Du zur Laufzeit auch nicht!

Also speicher die Datei lieber ins Userverzeichnis (System.getProperty("user.home");) bzw. ein Unterverzeichnis da.
Ah ok. Das wusste ich nicht. Wie kann ich aber z.B. dann einen Highscore implementieren und dann einem Freund von mir die .jar Datei schicken, und er kann dann das Spiel spielen und hat einen funktionierenden eigenen Highscore?
 
K

kneitzel

Du kannst ja eine Datei woanders auf dem System ablegen. Eine Möglichkeit, die auf allen Systemen funktionieren sollte, ist die Verwendung des User Verzeichnisses. Dieses kannst Du über die angegebene Property user.home bekommen.

Da kannst Du also z.B. einen Unterordner für Dein Spiel anlegen (am Besten mit einem . davor, das ist bei Unix/Mac so üblich) und da dann die Datei hinein schreiben.
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben