標籤:android style blog io ar color os 使用 sp
優點: 1.適合遊戲儲存,能儲存較大資料;
2.不僅能儲存到系統中,也能儲存到SD卡中!
@儲存方式:Stream 資料流方式
* @注意1:預設情況下,使用openFileOutput 方法建立的檔案只能被其調用的應用使用,
* 其他應用無法讀取這個檔案,如果需要在不同的應用中共用資料;
*
* @注意2:因為android os內部快閃記憶體有限,所以適合儲存較少的資料,當然我們也有解決的方法,
* 就是把資料儲存在SD開中,這樣就可以了!
*
* @提醒1 調用FileOutputStream 時指定的檔案不存在,Android 會自動建立它。
* 另外,在預設情況下,寫入的時候會覆蓋原 檔案內容,如果想把新寫入的內
* 容附加到原檔案內容後,則可以指定其mode為Context.MODE_APPEND。
* openFileInput("save.data")當指定的檔案不存在時會拋出異常,所以代碼部分需要捕獲異常。
*
* @提醒2 這裡我給大家講兩種方式,一種是原生態file流來寫入/讀入,
* 另外一種是用Data流封裝file流進行寫入/讀入 其實用data流來封裝進行操作;
* 原因是:封裝後支援了更多的寫入/讀入操作,比如:file流寫入不支援
* writeUTF(String str); 但是用Data封裝後就會支援。
* 最後在操作完後需要關閉所有的流
*
* @操作模式: Context.MODE_PRIVATE:新內容覆蓋原內容
* Context.MODE_APPEND:新內容追加到原內容後
* Context.MODE_WORLD_READABLE:允許其他應用程式讀取
* Context.MODE_WORLD_WRITEABLE:允許其他應用程式寫入,會覆蓋原資料。
--------------Android中單純用file來讀入的方式-----------------//也可以通過File file = new File(檔案路徑);//路徑預設是/data/data/包/files下,主包名稱可以查看AndroidManifest.xml的package,或者通過context.getFilesDir().getAbsolutePath()
FileInputStream fis = this.openFileInput("save.data"); ByteArrayOutputStream byteArray = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = fis.read(buffer)) > 0) { byteArray.write(buffer, 0, len);}String temp = byteArray.toString(); --------------Android中用data流封裝後的讀入的方式----------------- FileInputStream fis = this.openFileInput("save.himi");DataInputStream dis = new DataInputStream(fis); String temp = dis.readUTF(); //寫出草SD卡是需要判斷是否存在Environment.getExternalStorageState()--------------Android中單純用file來寫入的方式-------------- FileOutputStream fos = new FileOutputStream(f);fos.write(str.getBytes()); --------------Android中data封裝後來寫入的方式-------------- FileOutputStream fos = this.openFileOutput("save.himi", MODE_PRIVATE); //注意:如果是系統路徑,當沒有此檔案的時候,android 會預設建立一個!但是我們放入SD卡的時候要自己建立目錄路徑和檔案!// if (Environment.getExternalStorageState() != null) {// 這個方法在試探終端是否有sdcard!// Log.v("Himi", "有SD卡");// File path = new File("/sdcard/包名");// 建立目錄// File f = new File("/sdcard/包名/save.himi");// 建立檔案// if (!path.exists()) {// 目錄不存在返回false// path.mkdirs();// 建立一個目錄// }// if (!f.exists()) {// 檔案不存在返回false// f.createNewFile();// 建立一個檔案// }// fos = new FileOutputStream(f);// 將資料存入sd卡中// } DataOutputStream dos = new DataOutputStream(fos);dos.writeUTF(str.toString()); //api規定當寫入字串的時候必須寫入UTF-8格式的編碼//String content = EncodingUtils.getString(buffer, ”UTF-8″); 這個也能把字元數組轉碼制!
這裡我們為什麼要使用Data流來封裝,其實不光是獲得更多的操作方式,最主要的是方便快捷,你比如用file來讀入的時候,明顯的複雜了一些不說,它還一次性把所有資料都取出來了,不便於對資料的處理!
注意要在AndroidManifest.xml中添加SD卡讀寫權限<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>
Android 資料存放區之 File