Android 將少量的資料檔案儲存在 data/data 目錄下
阿新 • • 發佈:2019-02-01
在 Android 中,通常情況下 data 目錄是需要 root 許可權才能訪問的,每個應用程式在 data 中都會擁有一個私有的資料夾。
雖然 Android 禁止使用者直接訪問這些程式資料,但程式自己是可以訪問的,不過卻並非和存取 SD 卡資料一般。
訪問 data 目錄,需要用到 FileInputStream/FileOutputStream 兩個類,分別為讀寫,下面看看例子吧。
在 data 中存取影象
//副檔名 public enum Extension { png, jpeg } /* 將影象儲存到Data目錄 */ public static boolean SaveBitmapToData(Activity act, Bitmap bmpToSave, String FileNameWithoutExtension, Extension ext, int Quality) {//引數依次為:呼叫的 Activity,需要寫入 data 的點陣圖,檔名(不含副檔名),副檔名,影象質量 try { if (Quality > 100) Quality = 100; else if (Quality < 1) Quality = 1; FileOutputStream fos = act.openFileOutput(FileNameWithoutExtension + "." + ext.toString(), Context.MODE_PRIVATE); //這裡是關鍵,其實就是一個不含路徑但包含副檔名的檔名 if (ext == Extension.png) bmpToSave.compress(Bitmap.CompressFormat.PNG, Quality, fos); else if (ext == Extension.jpeg) bmpToSave.compress(Bitmap.CompressFormat.JPEG, Quality, fos); //寫入檔案 fos.flush(); fos.close(); return true; } catch (Exception e) { if (e.getMessage() != null) Log.w(Common.LOGCAT_TAG, e.getMessage()); else e.printStackTrace(); return false; } } /* 從Data目錄讀取影象 */ public static Bitmap GetBitmapFromData(Activity act, String FileName) { FileInputStream fis = null; try { fis = act.openFileInput(FileName); } catch (FileNotFoundException e) { e.printStackTrace(); } BufferedInputStream bis = new BufferedInputStream(fis); Bitmap bmpRet = BitmapFactory.decodeStream(bis); try { bis.close(); } catch (IOException e) { e.printStackTrace(); } try { fis.close(); } catch (IOException e) { e.printStackTrace(); } return bmpRet; }
注意:由於程式資料空間有限,故請不要儲存流媒體及大量資料,否則會導致其它應用程式無法安裝或執行。
請勿將此方法用於隱藏非法檔案、病毒等非法行為!