我正在使用libgdx函数Gdx.files.internal读取文件。该文件位于Android的文件夹资产中。一旦在桌面上启动应用程序,我就会更改文件并重新读取它。但它不起作用。我的意思是,应用程序读取旧文件,虽然我只是更改了它。这是代码块
public Scenario getScenario(String scenarioName)
{
FileHandle f = Gdx.files.internal(scenarioName);
return new Scenario(new BufferedReader(new InputStreamReader(f.read())));
}
有人知道Gdx.files.internal为什么还在读旧文件吗?当然,一旦我停止应用程序并重新启动它,就会读取新文件。这里有什么问题?
任何提示都会非常感激。
答案 0 :(得分:3)
Gdx内部文件是只读的。这就是为什么当你再次阅读它时,你会再次得到相同的数据 如果您想要一个可以读取和写入的文件,则需要使用本地或外部。 文档类型将更详细地解释here。
如果要在Android资源文件夹中提供初始版本,可以在应用启动时将其复制到本地,然后从该点开始使用本地文件。换句话说:
public void create() {
...
FileHandle internalFile = Gdx.files.internal(scenarioName);
internalFile.copyTo(Gdx.files.local(scenarioName);
}
答案 1 :(得分:1)
通过类路径找到Libgdx“内部”文件(请参阅FileHandle.java中对getResourceAsStream
的调用)。在Android上,这些是只读的,因为它们打包在JAR中,无法就地修改(JVM不支持)。
我有点惊讶,桌面版本不只是通过调用本地文件系统。这或者意味着当你运行它时,应用程序是在JAR中打包的(你运行的是打包版本,还是从Eclipse运行开发版本?),或者有一个ClassLoader可以缓存这些vaules。