2

我有主要活動,我創建一個名爲fileSaver的新對象。我正在嘗試將對象「數據」存檔。 FileSave有一個創建文件的方法serialize()。如何從活動之外將文件寫入Android設備?

private String FILE_NAME = "file.dat"; 
FileSaver fileSaver = new FileSaver(); 
Data data = new Data(); 
data.setEmail("[email protected]"); 
fileSaver.serialize((Object) data,FILE_NAME); 

問題是我無法在活動之外創建文件。當我嘗試相同的內部活動時,它會創建該文件。我正在試驗路徑,但沒有成功。我知道何時該文件是從活動創建的,它保存在/ data/data/my_package_name/files中,但是如何從外部活動類訪問該文件?

類FileSaver:

public class FileSaver { 

public void serialize(Object objToSerialize,String fileName) { 

    try { 
     ObjectOutputStream out = new ObjectOutputStream(
       new FileOutputStream(fileName)); 
     out.writeObject(objToSerialize); 
     out.close(); 
     System.out.println("Object : " + objToSerialize.getClass() 
       + " serialized successfully"); 
    } catch (Exception ex) { 
     System.out.println("Error Saving Object to File :" 
       + ex.getMessage()); 
     ex.printStackTrace(); 
    } 
} 
} 

謝謝。

+0

安置自己的logcat..are你得到任何錯誤消息?你怎麼打算做外部活動? –

+0

Logcat:12-01 18:45:39.001:I/System.out(1621):將對象保存到文件時出錯 :/file.dat:打開失敗:EROFS(只讀文件系統) 12-01 18 :45:39.029:W/System.err(1621):java.io.FileNotFoundException:/file.dat:打開失敗:EROFS(只讀文件系統) – Cristiano

+0

序列化對象在活動內部創建,所以我認爲它應該工作不知何故。 – Cristiano

回答

1

你要通過上下文之外的Java類和使用的情況下,使用此openFileOutput()方法,在Android設備內存中創建並寫入文件

+0

你能解釋一下這一點,或者可以把代碼的一部分?我不確定我明白。謝謝。 – Cristiano

+0

當我調用序列化方法時如何傳遞上下文? fileSaver.serialize((Object)data,FILE_NAME,?? context ??);我知道openFileOutput()方法,但如何在另一個類中使用該方法。對我而言,問題是如何將它與活動的上下文連接起來?我無法在任何地方找到示例。謝謝:) – Cristiano

0

您可以將文件保存的SD卡來代替。

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(Environment.getExternalStorageDirectory()+File.separator+filename)); 

//這裏filename是你在String中的輸入文件名,Environment.getExternalStorageDirectory()給你SDCard目錄。

另外,還要確保你在Android清單添加<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>文件

+0

謝謝。這是個好主意(我會嘗試它),但我的想法是將該文件寫入/ data/data/my_apk_package_name/files,其中應用程序具有存儲文件的所有權限。我試圖做一些上面提到的kumaand,但我不確定如何傳輸上下文,然後使用openFileOutput()方法。我幾乎整天都在Google上搜索,但找不到一些代碼示例。 – Cristiano

相關問題