1. 程式人生 > >Android 將少量的資料檔案儲存在 data/data 目錄下

Android 將少量的資料檔案儲存在 data/data 目錄下

在 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;
}

注意:由於程式資料空間有限,故請不要儲存流媒體及大量資料,否則會導致其它應用程式無法安裝或執行。
請勿將此方法用於隱藏非法檔案、病毒等非法行為!