2010-07-06 63 views
1

我想保存一個文件中的對象,但該文件沒有出現在設備上,我也沒有得到一個例外。android:不能寫入文件目錄,但可以在包dir

public static void save(Context ctx) { 
    Log.i("App serialization", "Saving to settings.ser: " + ctx.getFileStreamPath("settings.ser")); 
    FileOutputStream fos = null; 
    ObjectOutputStream out = null; 
    try { 
     fos = ctx.openFileOutput("settings.ser", Context.MODE_PRIVATE); 
     out = new ObjectOutputStream(fos); 
     out.writeObject(ApplicationData.settings); 
     out.flush(); 
     out.close(); 
     //fos.close(); 
     Log.i("App serialization", "Finished writing to settings.ser"); 
    } 
    catch(IOException ex) { 
     ex.printStackTrace(); 
     Log.e("App serialization", "Could not save to settings.ser"); 
    } 
} 

相反,如果我使用:

try { 
     fos = new FileOutputStream("/data/data/APP_PACKAGE/settings.ser"); 
     out = new ObjectOutputStream(fos); 

它的工作,我可以看到,該文件已經在設備上創建。

但這並不酷,它不是這樣做的,因爲目錄結構將來可能會改變。

+0

我有一個鬼鬼祟祟的懷疑,這是一個權限問題 - 所以它沒有吐出任何logcat或任何錯誤?任何警告? – xil3 2010-07-06 11:01:40

+0

logcat中沒有任何內容。我想過許可問題,並卸載了重新安裝,但仍然沒有。 – Auras 2010-07-06 11:27:43

回答

0

首先,擺脫printStackTrace()呼叫,並將您的IOException對象替換爲android.util.Log(例如,e()調用中的第三個參數)。

其次,/data/data/APP_PACKAGE/settings.ser不是您的文件將在您的第一個代碼清單結束的地方。它將進入/data/data/APP_PACKAGE/files/settings.ser

第三,/data/data/APP_PACKAGE/settings.ser在您的應用程序安裝在SD上時可能不是Android 2.2上的有效路徑。

+0

1st - 謝謝 第二和第三 - 我知道這一點;這就是我在上一篇文章中所說的話。如果我嘗試在/ files子目錄中寫入,它將不起作用,但如果我在應用程序包目錄中寫入,它將不起作用。 – Auras 2010-07-06 12:20:49

+0

嘗試構建一個新的模擬器圖像或其他東西。你無法寫入你所在的位置,也無法寫入'文件/'。但是,如果您嘗試寫入'files /'的唯一方法是通過上面的save()'方法,那麼可以嘗試一個不同的'Context'。例如,如果您正在使用的'Context'來自'getApplicationContext()',則將其替換爲首先調用'getApplicationContext()'的'Activity'或'Service'。 – CommonsWare 2010-07-06 13:03:37

+0

這很有趣,因爲我使用相同的上下文在代碼中的其他地方使用openFileOutput()和FileOutputStream將文件下載到文件/目錄。 – Auras 2010-07-06 13:31:11

相關問題