Android file.exists()不起作用

时间:2011-01-14 21:11:45

标签: android

喂,

这是将数据类写入文件的一些代码,然后检查文件是否存在。我可以看到该文件存在于模拟器上,但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

1 个答案:

答案 0 :(得分:5)

您需要使用Context#getFileStreamPath(String),其中String是您尝试访问的File对象的文件名。然后,您可以在该对象上调用File#exists。所以:

File file = getFileStreamPath(mGameData.pilotName + STATE_FILE_EXTENSION);

使您可以访问指向私有应用存储区域中正确位置的File对象。

您的代码将访问的是访问根路径上的文件/<your file name>。你的文件显然不存在。