2011-01-14 129 views
3

Hallo,Android file.exists()not working

下面是一些將數據類寫入文件,然後檢查文件是否存在的代碼。我可以看到該文件存在於模擬器上,但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

回答

5

您需要使用Context#getFileStreamPath(String)其中StringFile對象,你要訪問的文件名。然後你可以在該對象上調用File#exists。因此:

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

使您可以訪問指向您的私人應用程序存儲區域中正確位置的File對象。

你的代碼將會在atm上訪問位於根路徑上的文件/<your file name>。你的文件顯然不存在。

+0

輝煌,謝謝。我認爲這些應用只能訪問他們自己的文件 – FrinkTheBrave 2011-01-16 15:01:38