作者freedls (only B'z)
看板AndroidDev
標題[問題] Android 寫檔案的問題
時間Mon Jul 13 17:20:46 2015
Code 片段如下:
1. File file = new File(filePath);
2. String xmlString = XMLFileManager.instance.updateLockFileXml(file,value);
3. FileOutputStream fop = new FileOutputStream(file);
4. if(xmlString!=null && !xmlString.equals(""))
5. {
6. byte[] contentInBytes = xmlString.getBytes();
7. fop.write(contentInBytes);
8. fop.flush();
9. fop.close();
10. }
小弟目前遇到一個寫xml檔中斷的問題,
如果將中斷點設定在第4行,
也就是當程式進行到將file內的資訊餵給FileOutputStream後,
此時將裝置強制關機或斷電,
則下次重開機後,filePath那個檔案的內容會變成空的,
請問是否有什麼機制可以避免在FileOutputStream尚未close之前斷電,
而原本檔案內容可以保持不變?
會需要避免這樣的情況發生是因為,
目前功能需求需要紀錄某些資訊,而這些資訊在APP移除後必須還存在,
因此才會用寫檔案的方式記錄,
而斷電或關機則是測試時須考量到萬一停電時的狀況,
目前就是被測試出來程式在執行時斷電,會有很高的機率讓原本的檔案內容變空的,
請各路高手求解... <(_ _)>
感謝感謝。
--
臉上總是掛著明朗笑容的人,往往最是寂寞。
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 113.196.176.124
※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1436779251.A.30B.html
→ ssccg: 如果目標是不要蓋掉原本的檔案,就先寫到另一個檔案 07/13 17:28
→ ssccg: 成功之後再改檔名 07/13 17:28
謝謝你的回應,這方法當初也有想過,
比較好奇的是,為什麼用SharedPreferences儲存時斷電就不會遇到這樣的狀況,
但無奈SharedPreferences在APP移除後會清掉,不符合需求
明明同樣也都是寫xml檔案...
是我遺漏了什麼嗎,還是我的File寫檔的方式有誤?
※ 編輯: freedls (113.196.176.124), 07/13/2015 18:15:55
→ ssccg: 那你可以去看SharedPreferences的寫檔方式 07/13 18:29
→ ssccg: 流程是先把原本檔案改名當備份,然後才寫新檔,失敗就復原 07/13 18:31