2016-05-17 18 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);