Libgdx FileHandle读写一行以上

Libgdx FileHandle reading and writing more than one line

好而简单的问题..我使用文件句柄来写入和读取分数..输赢..但与缓冲的 reader 不同,您不能使用 read.line();那么你如何在文件处理程序中写入和读取行? thanx 这是代码

    private void writeSaveData()
{
    winstring = Integer.toString(wins);
    lossstring = Integer.toString(losses);

    FileHandle scores = Gdx.files.local("Score");
    scores.writeString(winstring, false);
    // I want to add another line here for lossess
}


private void loadScores()
{
    FileHandle scores = Gdx.files.local("Score");
    winstringread= scores.readString(winstring);
    wins = Integer.parseInt(winstringread);
    // same here add line to read lossess
}

对于你的情况,我建议你看一下 JSON 格式。 Here 是官方文档。基本上你只需要创建简单的 POJO class,在你的情况下它可能是这样的:

public class GameResults {

   private int wins;
   private int losses;
   ...
   public int getWins() {
       return wins;
   }
   public void setWins(int wins){
       this.wins=wins; 
   }
  ...

}

然后,每当您需要写入结果文件时,您都可以使用:

GameResults results = new GameResults();
results.setWins(winstring);
Json json = new Json();
FileHandle scores = Gdx.files.local("Score");
scores.writeString(json.toJson(results), false);

当你需要阅读时:

FileHandle scores = Gdx.files.local("Score");
winstringread = scores.readString(winstring);
Json json = new Json();
GameResults results = json.fromJson(GameResults, winstringread);

奖金:

此外,您可以使用 Base64Coder class 来解码您的结果文件。只是为了更好地保护自己免受黑客攻击。您只需要在读取文件时添加这一行:

Base64Coder.decodeString(RESULT_FILE.readString()), false)

和你写的那一行:

RESULT_FILE.writeString(Base64Coder.encodeString(RESULT_FILE.readString()), false);

对于 libgdx 和您描述的这个具体问题。您可以读取和写入整个字符串并解析分隔符。

非人类可读。我们在这里所做的是采用和使用 String 格式,以便我们可以清楚地看到该行将如何编写。我们将获胜分数放在第一位,将失败放在第二位,因此如果我赢了 10 场而他们输了 5 场,字符串将如下所示 10=5。这将被保存到文件中。当我们读回文件时,我们读取 10=5,然后在 = 上拆分这个字符串,剩下两个字符串 105。然后我们可以将它们解析为整数。

private void writeSaveData()
{
    String saveString = String.format("%d=%d", wins, losses);
    FileHandle scores = Gdx.files.local("Score");
    scores.writeString(saveString, false);
}


private void loadScores()
{
    FileHandle scores = Gdx.files.local("Score");
    String loaddedString = scores.readString(winstring);
    String[] scores = loadedString.split("=");
    wins = Integer.parseInt(scores[0]);
    losses = Integer.parseInt(scores[1])    
}