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



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

 

原文位址:http://www.littledai.com/20110809/111749/998
arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()