android assets文件夹浅谈

assets英文单词的表面意思是资产、资源,顾名思义,这个文件夹下放的肯定是一些资源文件,而且 assets 文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像 xml, java 文件被预编译,可以存放一些图片,html,js, css 等文件。assets文件夹下的文件不会被映射到R.java中,访问的时候要用到AssetManager类

可以通过以下方式获取输入流来进行写操作:

AssetManager am = null;

am = getAssets(); 

InputStream in = am.open("filename"); 

关于这个文件路径即filename,简单说一下。
现在assets文件夹下有一个images文件夹,iamges文件夹下有一张名为large.jpg 的图片。

filename=images/large.jpg

下面上代码具体看一下是怎么引用的(亲测好使)。这段代码实现的功能是将large.jpg复制到路径为/mnt/sdcard/Imagexiang/a.jpg上面 ,纸上得来终觉浅,绝知此事要躬行嘛。

package xiang.assetsdemotest;
 

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.content.res.AssetManager;
import android.view.Menu;
public class MainActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		AssetManager assetManager=getAssets();
		InputStream asset = null;//用来获取从assets文件夹下的输入流
		OutputStream out = null;//输出流,用来复制图片
		BufferedInputStream bis=null;//缓存输入流
		BufferedOutputStream bos=null;//缓存输出流
		try {
			asset=assetManager.open("images/large.jpg");
			bis=new BufferedInputStream(asset);
			out=new FileOutputStream(Environment.getExternalStorageDirectory().getPath()+"/Imagexiang/a.jpg");
			bos=new BufferedOutputStream(out);
			byte ima[]=new byte[1024];
			int len;
			while((len=bis.read(ima))!=-1)
			{
				bos.write(ima, 0, len);
				
			}
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		finally
		{
			try {
				if(bos!=null)
				{
					bos.close();
				}
				
				if(out!=null)
				{
				out.close();
				}
				if(bis!=null)
				{
					bis.close();
				}
				if(asset!=null)
				{
				asset.close();
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
	}
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}

还有一点:

Google的Android系统处理Assert有个bug,在AssertManager中不能处理单个超过1MB的文件,不然会报异常。


outputStream与InputStream使用只能传输字节byte

InputStream

InputStream 是所有的输入字节流的父类,它是一个抽象类。

InputStream in=new FileInputStream(文件);    //声明一个输入对象//多态的方式
byte[] b=new byte[1024];
in.read(b);									//读取文件内容到b
in.close();									//关闭输入流
System.out.println(new String(b));			//输出

outputStream

OutputStream 是所有的输出字节流的父类,它也是一个抽象类。

OutputStream out = new FileOutputStream(文件);  // 准备好一个输出的对象//多态
String str = "Hello World!!!" ;        		   // 准备一个字符串
byte b[] = str.getBytes() ;           		   // 只能输出byte数组,所以将字符串变为byte数组
out.write(b) ;               				   // 将内容输出,保存文件
out.close() ;                                  // 关闭输出流

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值