Android file.exists()不起作用

Fri*_*ave 3 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();
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

-Frink

Ric*_*ler 5

您需要使用Context#getFileStreamPath(String)其中String是的文件名File,你试图访问对象.然后你可以调用File#exists那个对象.所以:

File file = getFileStreamPath(mGameData.pilotName + STATE_FILE_EXTENSION);
Run Code Online (Sandbox Code Playgroud)

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

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