LibGDX写入文本文件并接收各种错误

时间:2014-03-07 03:35:01

标签: java android file file-io libgdx

我目前使用LibGDX创建的游戏具有“高分”功能,其中高分保存在文本文件中,然后写入或读取到屏幕。我在这里遇到了很多错误。我尝试设置权限以允许外部文件写入,我尝试将我的.txt文件放在不同的目录中。我尝试使用Gdx.files.internal() and Gdx.files.external()没有任何效果。以下是获取和设置高分的两种方法。

private int getHighScore()
{
    FileHandle scoreFile = Gdx.files.local("data/high_score.txt");
    String text = scoreFile.readString();
    int highScore = Integer.parseInt(text);
    return highScore;
}

private void setHighScore(int newScore)
{
    FileHandle scoreFile = Gdx.files.local("data/high_score.txt");
    String score = Integer.toString(newScore);
    scoreFile.writeString(score, false);
}

在游戏中死亡时(应该显示分数),我从LibGDX收到此错误:

03-06 22:31:37.437: ERROR/AndroidRuntime(14533): FATAL EXCEPTION: GLThread 4617
        com.badlogic.gdx.utils.GdxRuntimeException: File not found: /data/data/hasherr.floppyfish.android.core/files/data/high_score.txt (Local)
        at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:133)
        at com.badlogic.gdx.backends.android.AndroidFileHandle.read(AndroidFileHandle.java:77)
        at com.badlogic.gdx.files.FileHandle.readString(FileHandle.java:198)
        at com.badlogic.gdx.files.FileHandle.readString(FileHandle.java:186)
        at hasherr.ghostly.main.state.DeathState.getHighScore(DeathState.java:122)
        at hasherr.ghostly.main.state.DeathState.render(DeathState.java:87)
        at hasherr.ghostly.main.state.StateManager.render(StateManager.java:37)

请注意:

  

找不到档案:/data/data/hasherr.floppyfish.android.core/files/data/high_score.txt(本地)

/data/data/hasherr.floppyfish.android.core/files/data/high_score.txt不是我游戏中的目录/文件。 data/high_score.txt是,这就是我想要覆盖的文件。我对Gdx.files.local(path)方法不是很熟悉,所以我不确定它是从哪里获取的。

如何让我的程序在不丢失错误的情况下使用此文本文件?

2 个答案:

答案 0 :(得分:3)

首先,我建议确保Highscores.txt存在Gdx.files.local("data/high_score.txt");。为此,您可以使用:boolean exists = Gdx.files.local("Highscores.txt").exists();。如果此布尔值为false,则可以打印“no Highscores”而不是读取.txt。 正如@MelihYıldız'所说,Gdx.files.local指向私有应用程序存储。但是,如果您将其用于writeread数据,则无需关心它的位置。只需确保始终使用相同的FileHandle。要了解所有不同的Gdx.files.xxx,您可以阅读this。它解释了它存储数据的位置以及哪个apptype可以访问它。 对于Highscores,您还可以考虑使用PreferencesA quick tutorial。 请注意,Preferences是存储HTML5应用程序数据的唯一可能性。如果你想让你的应用程序成为一个Web应用程序,你应该仔细考虑它们。

答案 1 :(得分:0)

Gdx使用您的应用程序文件夹。

来自文档的'文件处理'部分:

  

文件也可以存储在内部存储中,它们是可读写的。每个已安装的应用程序都有专用的内部存储目该目录只能由该应用程序访问。可以将此存储视为应用程序的私有工作区。

在图表中,您可以看到本地:

  

本地文件相对于应用程序的根目录或工作目录存储在桌面上,并且相对于Android上应用程序的内部(私有)存储。请注意本地和内部在桌面上大致相同。

如果要存储在设备内部存储中,则应使用Gdx.files.internal("data/high_score.txt");

参考链接:https://github.com/libgdx/libgdx/wiki/File-handling