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
,然后在 =
上拆分这个字符串,剩下两个字符串 10
和 5
。然后我们可以将它们解析为整数。
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])
}
好而简单的问题..我使用文件句柄来写入和读取分数..输赢..但与缓冲的 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
,然后在 =
上拆分这个字符串,剩下两个字符串 10
和 5
。然后我们可以将它们解析为整数。
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])
}