[問題] Android 寫檔案的問題

看板AndroidDev作者 (only B'z)時間10年前 (2015/07/13 17:20), 10年前編輯推噓0(004)
留言4則, 1人參與, 最新討論串1/1
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

07/13 17:28, , 1F
如果目標是不要蓋掉原本的檔案,就先寫到另一個檔案
07/13 17:28, 1F

07/13 17:28, , 2F
成功之後再改檔名
07/13 17:28, 2F
謝謝你的回應,這方法當初也有想過, 比較好奇的是,為什麼用SharedPreferences儲存時斷電就不會遇到這樣的狀況, 但無奈SharedPreferences在APP移除後會清掉,不符合需求 明明同樣也都是寫xml檔案... 是我遺漏了什麼嗎,還是我的File寫檔的方式有誤? ※ 編輯: freedls (113.196.176.124), 07/13/2015 18:15:55

07/13 18:29, , 3F
那你可以去看SharedPreferences的寫檔方式
07/13 18:29, 3F

07/13 18:31, , 4F
流程是先把原本檔案改名當備份,然後才寫新檔,失敗就復原
07/13 18:31, 4F
文章代碼(AID): #1LeuBpCB (AndroidDev)