2016-05-17 50 views
0

不错的和容易的问题..我使用文件句柄来写和读分数..胜利和lossess ..但不像缓冲读者,你不能使用read.line();那么你如何在文件处理程序中编写和读取行?这里 感谢名单是代码Libgdx FileHandle读写一条以上的行

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 
} 
+0

我在另一篇文章的回答将帮助你阅读整个文件到一个多行,将其写入新的生产线是一样的,但是追加“\ r \ n”来,你想成为一个单独的每个String行[Libgdx文件句柄..阅读单行](http://stackoverflow.com/questions/37281063/libgdx-file-handle-reading-a-single-line/37281292#37281292) – Underbalanced

+0

这也是我的问题,它不说如何写两行?任何帮助.. – Joe

+1

当你创建一个字符串时,只需在保存完整的东西之前添加+“\ r \ n”。'String output = String.format(“Wins:%d \ r \ nLosses:%d”损失);' – Underbalanced

回答

1

对于libgdx和这一特定问题你所描述。您可以读写整个字符串并在分隔符上进行分析。

非人类可读。我们在这里做的是采用和使用字符串格式,所以我们可以清楚地看到如何写行。我们首先赢得比分,然后再输掉第二名,所以如果我赢了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])  
} 
+0

谢谢你,我的朋友..再次完美的简单的答案,没有任何并发​​症..我明白你说我试过这个,但没有工作...... nooby%d \ r \ n%d ..猜想原因可能有一些字符串代码在那里..再次为thanx的帮助... – Joe

+0

也0和1索引是帮助,因为我从1开始.. :( – Joe

+0

@Joe没有问题的人!我正在建立一个沙盒MMO,像Terreria/Starbound使用libGDX我可以理解API限制的沮丧,所以我通常也会找到解决方法! – Underbalanced

0

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

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类脱编码你的结果文件。只是为了更好地保护免受黑客攻击。所有你需要的是当你读文件中加入这一行:

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

和线当你写:

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