-3

動作する独自の bufferedwriter を作成しました。でも本当にそうなのか分からない?

ログアウト時に (200 コイン) の bufferedreader を作成し、ログインすると (545453 コイン) またはその他の金額を取得しました。これは bufferedwriter であると確信しています。

public static int coins;
private static final String DIR = "./Data/";
    public static boolean SavePlayer;

    public static void saveAll() {
        SavePlayer = true;
        if (!SavePlayer) {
            System.out.println("[WoG Error]: Their was an error saving players.");
            return;
        }
        saveGame();
    }

    public static boolean saveGame() {
        if (Player.playerName == null) {
            return false;
        }
        try {
            File file = new File(DIR + Player.playerName.toLowerCase() + ".dat");
            if (!file.exists()) 
                file.createNewFile();
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            DataOutputStream o = new DataOutputStream(fileOutputStream);
            o.writeUTF(Player.playerName);
            o.writeInt(Player.coins);
            //o.writeInt(Player.height);
            o.close();
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    public static boolean loadGame() throws InterruptedException {
        try {
            File file = new File(DIR + Player.playerName.toLowerCase() + ".dat");
            if (!file.exists()) {
                System.out.println("[WoG Error] Sorry but the account does not exist.");
                return false;
            }
            FileInputStream fileInputStream = new FileInputStream(file);
            DataInputStream l = new DataInputStream(fileInputStream);
            Player.playerName = l.toString();
            Player.coins = l.readInt();
            //Player.height = l.readInt();
            l.close();
            fileInputStream.close();
            Player.home();
        } catch (final IOException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

}

すべて (整数) を正しく保存するにはどうすればよいですか?

4

3 に答える 3

5

この 3 行から、プレイヤーの名前とコイン カウントを保存しているように見えます...

DataOutputStream o = new DataOutputStream(fileOutputStream);
o.writeUTF(Player.playerName); 
o.writeInt(Player.coins);

そして、次のようにそれらを再度読み込もうとします:

DataInputStream l = new DataInputStream(fileInputStream);
Player.playerName = l.toString(); // <-- change to l.readUTF()
Player.coins = l.readInt();

l.toString()の代わりに を使用していることに気付きましたl.readUTF()

確かに、データを保存した方法に対応する方法でデータを読み戻す必要がありますか?

つまり、 でデータを保存した場合、 でデータo.writeUTF()を読み戻す必要がありますl.readUTF()

のように。

于 2013-08-30T20:01:01.233 に答える
2

変化する

Player.playerName = l.toString();

Player.playerName = l.readUTF();

一般にPrintWriter、ファイルを書き込むようなものを使用する必要があります。writeUTFまたはのような低レベルの操作を記述する必要はありませんwriteInt。あなたは直接することができます

printWriter.println(playerName);

読みながら、ScannerまたはBufferedReader

于 2013-08-30T20:02:44.270 に答える
2

これは間違っています:

Player.playerName = l.toString();

ここからデータを読み取っているのではなく、オブジェクトを文字列にDataInputStream変換しているだけです。の代わりにDataInputStream呼び出します:readUTF()toString()

Player.playerName = l.readUTF();
于 2013-08-30T20:02:46.803 に答える