Libgdx FileHandle 读写多行

Posted

技术标签:

【中文标题】Libgdx FileHandle 读写多行【英文标题】:Libgdx FileHandle reading and writing more than one line 【发布时间】:2016-05-17 17:59:52 【问题描述】:

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

    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

【问题讨论】:

我在另一篇文章中的回答将帮助您将整个文件读入多行,将其写入新行是相同的,但将“\r\n”附加到您想要的每个字符串单独一行Libgdx file handle.. reading a single line 这也是我的问题,它没有说如何写两行?任何帮助.. 当你创建一个字符串时,只需添加 + "\r\n" 然后保存整个内容。String output = String.format("Wins: %d\r\nLosses: %d", wins, losses); 嘿,欠平衡...仍然需要您的帮助,伙计...我可以写入文件但不能读取它..叹息..这是最后一件事,我坚持阅读两行 ffs..请帮助您如何阅读文件??? 您希望文件对用户可读还是只有程序可读? 【参考方案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])    

【讨论】:

谢谢你,我的朋友.. 再次完善一个简单的答案,没有复杂性.. 我明白你的意思我试过这个但没用...... nooby %d\r\n%d.. 猜因为那里可能有一些字符串代码......再次感谢帮助...... 0 和 1 索引也很有帮助,因为我从 1.. 开始 :( @Joe 没问题的人!我正在使用 libGDX 构建沙盒 MMO,例如 Terreria/Starbound,我可以理解 API 限制的挫败感。所以我通常也在想办法! 是的,伙计.. 知道有一个代码可以帮助你,你不知道,编码真的很令人沮丧......但是当你点击运行并且它工作的那一刻非常值得......: ) .. gdluck 你的游戏人希望它成功..【参考方案2】:

在您的情况下,我建议您查看 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);

【讨论】:

以上是关于Libgdx FileHandle 读写多行的主要内容,如果未能解决你的问题,请参考以下文章

Libgdx 标签多行文字高度

库GDX 。绘制多行文本

[ Skill ] 文件读写 & IO 句柄

开源java游戏框架libgdx专题-07-文件处理

为啥 FileHandle 不一致地返回“nil”

Filehandle 类将整个文件加载到内存中