喂,
这是将数据类写入文件的一些代码,然后检查文件是否存在。我可以看到该文件存在于模拟器上,但file.exists()因此saveStateAvailable()返回false。
private void saveStateFile() {
/*DEBUG*/Log.d(this.getClass().getName(), "saveStateFile: Started");
mGameData = getGameData();
try {
FileOutputStream fileoutputstream = openFileOutput(mGameData.pilotName + STATE_FILE_EXTENSION, Context.MODE_WORLD_WRITEABLE);
ObjectOutputStream objectoutputstream;
objectoutputstream = new ObjectOutputStream(fileoutputstream);
objectoutputstream.writeObject(mGameData);
objectoutputstream.close();
fileoutputstream.close();
/*DEBUG*/Log.i(this.getClass().getName(), "saveStateFile: State saved to "+mGameData.pilotName + STATE_FILE_EXTENSION);
} catch (IOException e) {
/*DEBUG*/Log.e(this.getClass().getName(), "saveStateFile: Error writing data state file, "+mGameData.pilotName + STATE_FILE_EXTENSION);
e.printStackTrace();
}
/*DEBUG*/Log.d(this.getClass().getName(), "saveStateFile: Finished stateFileAvailable="+stateFileAvailable());
}
private boolean stateFileAvailable() {
File file = new File(mGameData.pilotName + STATE_FILE_EXTENSION);
/*DEBUG*/Log.d(this.getClass().getName(), "stateFileAvailable: Called ("+mGameData.pilotName + STATE_FILE_EXTENSION+" exists = "+file.exists()+")");
return file.exists();
}
有什么想法吗?
-Frink
答案 0 :(得分:5)
您需要使用Context#getFileStreamPath(String)
,其中String
是您尝试访问的File
对象的文件名。然后,您可以在该对象上调用File#exists
。所以:
File file = getFileStreamPath(mGameData.pilotName + STATE_FILE_EXTENSION);
使您可以访问指向私有应用存储区域中正确位置的File
对象。
您的代码将访问的是访问根路径上的文件/<your file name>
。你的文件显然不存在。