import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; /** * This Activty shows how to save an image (Bitmap) to the filesystem, with FileOutputStream object * @author FaYnaSoft Labs * */ public class Main extends Activity { private Bitmap bitmap; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.icon); FileOutputStream fos = null; try { fos = openFileOutput("image", Context.MODE_PRIVATE); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); } catch (FileNotFoundException e) { } finally { if (fos != null) { try { fos.flush(); fos.close(); } catch (IOException e) { } } } } }
这个只能存储到应用的/data/data/packageName/files里, 而不是sd卡中,这是部分log
===========================================
03-23 13:56:07.639: WARN/System.err(5972): java.lang.IllegalArgumentException: File /mnt/sdcard/appMessage.png contains a path separator
03-23 13:56:07.639: WARN/System.err(5972): at android.app.ContextImpl.makeFilename(ContextImpl.java:1693)
03-23 13:56:07.639: WARN/System.err(5972): at android.app.ContextImpl.openFileOutput(ContextImpl.java:414)
03-23 13:56:07.639: WARN/System.err(5972): at android.content.ContextWrapper.openFileOutput(ContextWrapper.java:158)
===========================================
可以实现的方案如下:
用InputStream is=this.getResources().openRawResource(R.drawable.icon);
再讲InputStream 转成 byte[],网上有方法,也可以参考下一篇Blog
最后将这个byte[]写入到sd卡中去。