2012年12月13日木曜日

[安藤]android 如何安全的讀寫檔案,不會出現偶發性資料不全


此例為把資料寫在cache目錄裡面。
通常跟環境有關的資料都需要傳入context. 所以:
public String loadFileFromCache(Context context, String fileName)
throws IOException, FileNotFoundException
{
    if (fileName != null)
    {
        ContextWrapper cw = new ContextWrapper(context);
        BufferedReader r = new BufferedReader(new InputStreamReader(new     
            FileInputStream(new File(cw.getCacheDir(), fileName))));
        StringBuilder fileContent = new StringBuilder();
        String line;
        while ((line = r.readLine()) != null) {
            fileContent.append(line);
        }

        r.close();
        return fileContent;
    }
    return null;
}


public void writeFileToCache(Context context, String fileName)
throws IOException
{
    if (fileName != null)
    {
        ContextWrapper cw = new ContextWrapper(context);
        BufferedWriter fos = new BufferedWriter(new FileWriter(new         
            File(cw.getCacheDir(), fileName)));
        fos.write(str);
        fos.flush();
        fos.close();
    }
}

stackoverflow的高手們建議要套buffered iostream,
這樣在處理大資料的時候比較穩定。
處理字串一定要使用 reader / writer這兩個會針對字碼作處理的讀寫函數,
若使用一般的iostream,讀寫出來的資料都會變成亂碼。

使用StringBuilder的建議也是從stackoverflow來的。會比一直new string要快很多。
至於寫到外部sd卡或是其他地方的變化,還有改成讀寫一般2進檔的變化就自己來吧。




0 件のコメント:

コメントを投稿