2013-04-11 94 views
3

我有一些图像显示在应用程序中(当用户从​​中选择图像时,如从图库中选取)。android: - 如何将图像从资产复制到SD卡?

问题是如何将代码中的资产 文件夹中的图像复制到SD卡上的文件夹中。

+0

我试图图像直接把SD卡,但它不work.Then使用此http://计算器.com/questions/12173468/copy-images-from-assest-to-sd-card-on-install-android-application – noviceAndroid 2013-04-11 08:01:42

+0

and it did,what? – njzk2 2013-04-11 09:53:30

回答

3
AssetManager assetManager = context.getAssets(); 
InputStream is = assetManager.open(fileName); 

获取AssetManager和呼叫open与文件我想要复制为参数。 然后你可以用这种方式

File out = new File(Environment.getExternalStorageDirectory(), fileName); 
byte[] buffer = new byte[BUFFER_LEN]; 
FileOutputStream fos = new FileOutputStream(out); 
int read = 0; 

while ((read = is.read(buffer, 0, BUFFER_LEN)) >= 0) { 
     fos.write(buffer, 0, read); 
    } 

fos.flush(); 
fos.close() 
is.close() 

记得添加WRITE_EXTERNAL_STORAGE许可,您AndroidManifest.xml文件

+0

谢谢你的回答,这将用于指定的文件,但在我的项目中有图像(不是一个图像)。 – noviceAndroid 2013-04-11 08:30:08

+0

它看起来像Environment.getExternalStorageDirectory是一种方法,而不是公共成员,所以它应该是Environment.getExternalStorageDirectory()(带括号) – Grimmy 2014-02-13 14:54:30

+0

当然是。这是一个错字。感谢您指出@Grimmy – Blackbelt 2014-02-13 14:55:37

0
  • 获得使用多种方法之一位图资源简单地复制。

例:

Bitmap bitmap = BitmapFactory.decodeResource(resource, id); // get your bitmap that you want to save on SD card. 
  • 获取存储资源的路径。

String compressedFilePath = Environment.getExternalStorageDirectory() + File.separator + "FOLDERNAME" + File.separator + "FILENAME.jpg";

  • 保存使用压缩方法。 (快捷方式来保存图像为每docs

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, new FileOutputStream(new File(pathToStore))); // use 100 to make sure image quality is not reduced(Read the docs)

注意:您需要写(并可能在将来被读取)访问写入SD卡。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
+0

所以基本上你正在采取一个压缩的图像,解压缩它,然后再压缩在SD卡上。是不是更简单,像复制它? – njzk2 2013-04-11 09:54:18

+0

不完全。拍摄图像时,调用压缩方法,如果压缩值设置为100,则只是返回相同的图像。它是将图像保存到任何位置的简单方法。没有压缩也没有减压。 – 2013-04-11 10:18:33

+0

是的,有。即使压缩是无损的,jpeg也会被压缩。你正在创建一个jpeg(或其他)的位图,然后解压缩它,然后创建一个新的jpeg文件,这是一个压缩文件。 – njzk2 2013-04-11 11:40:52

2
private void copyFileAssets() { 
     AssetManager assetManager = getAssets();    
     InputStream in = null; 
     OutputStream out = null; 
     try { 
      in = assetManager.open("ceo.jpg"); 
      out = new FileOutputStream(Environment.getExternalStorageDirectory()+File.separator+ "abc.jpg"); 
      copyFile(in, out); 
      in.close(); 
      in = null; 
      out.flush(); 
      out.close(); 
      out = null; 
     } catch(IOException e) { 
      Log.e("tag", "Failed to copy asset file: " + filename, e); 
     }  

} 

private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while((read = in.read(buffer)) != -1){ 
     out.write(buffer, 0, read); 
    } 
} 

你必须添加此权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />