2011年9月4日 星期日

【Android】TQC+題組系列2(七)


剛看到題目的時候完全不會想到這題會花掉我將近一個禮拜的時間才找到解法...


這題其實實作內容不算難,程式量也算少,按鈕切換等等都已經預先設計好了,我們只需要撰寫寫入指定路徑純文字檔的讀寫串流 IO 即可。

所以一開始我就直覺的照著書上指定的路徑,用之前寫入 SD 卡用的方法去做,結果在 createNewFile()這個方法永遠都會丟出 no such file or directory. 的 exception,mkdir() 永遠都是 return false,在研究與實驗了幾乎所有可能造成錯誤的細節之後,我才開始懷疑,寫入預設 package 用的方式,可能根本就跟寫入 SD 卡不一樣。

再換了快30幾種不同的關鍵字,想到快放棄的時候終於被我找到一個可以參考的網站

由該網站終於知道了,這題的儲存方式是屬於 Internal Storage,它有專用的寫入方式...
FileOutputStream stream = null;
OutputStreamWriter writer = null;
try {
    stream = openFileOutput(FileName, MODE_PRIVATE);
    writer = new OutputStreamWriter(stream);
    writer.write(data);
} catch (FileNotFoundException ex1) {
    ex1.printStackTrace();
} catch (IOException ex2) {
    ex2.printStackTrace();
} finally {
    try {
        writer.close();
        stream.close();
    } catch (IOException ex3) {
        ex3.printStackTrace();
    }
}
看到 MODE_PRIVATE 這個常數就笑了,難怪沒辦法寫入這個路徑...

讀出的部分則是
String data = "";
FileInputStream stream = null;
InputStreamReader reader = null;
try {
    stream = openFileInput(FileName);
    reader = new InputStreamReader(stream);
    char[] buf = new char[256];
    int length = reader.read(buf);
    data = new String(buf).substring(0, length);
} catch (FileNotFoundException ex1) {

} catch (IOException ex2) {

} finally {
    try {
        reader.close();
        stream.close();
    } catch (IOException ex3) {

    }
}
最後讓這個內容其實沒什麼難度的題目創下耗時最久的紀錄...總覺得這個用法太冷門了。

沒有留言:

張貼留言