android assets与raw资源

先看图片演示:

1 assets

assets文件夹资源的访问

       assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。

1.1 步骤

      1. 先在Activity里面调用getAssets() 来获取AssetManager引用。

      2. 再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStream。 

      3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close() 。

      4.调用AssetManager.close() 关闭AssetManager。

1.2 assets示例

需要注意的是,来自Resources和Assets 中的文件只可以读取而不能进行写的操作

public String getFromAssets(String fileName){

    try {

        InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) );

        BufferedReader bufReader = new BufferedReader(inputReader);

        String line="";

        String Result="";

        while((line = bufReader.readLine()) != null)

            Result += line;

        return Result;

    } catch (Exception e) {

        e.printStackTrace();

    }

}

  

2 Raw

存储在res/raw位置的文件不会被平台编译,而是作为可用的原始资源。读取原始资源非常简单。

2.1 步骤

首先调用Context.getResource获得当前应用程序上下文的Resources引用.

然后调用openRawResource(int id)得到InputStream.

最后,操作InputStream得到数据。

 

注意:把文件放在res/raw目录下,则R类会自动提供该id.

2.2提速文件读取

提速文件读取,其原理就是读的时候,先把文件的一些数据读到缓冲中。这样的好处是如果读的内容已经在缓冲中,就读缓冲的数据。如果没有,就让缓冲先从文件读取数据,然后再从缓冲读数据。这样的好处是减少对文件的操作次数,从而达到提高性能的目的。

坏处是要额外的内存来做缓冲区.

2.3  Raw示例

 

 public String getFromRaw(){

    try {

        InputStreamReader inputReader = new InputStreamReader( getResources().openRawResource(R.raw.test1));

        BufferedReader bufReader = new BufferedReader(inputReader);

        String line="";

        String Result="";

        while((line = bufReader.readLine()) != null)

            Result += line;

        return Result;

    } catch (Exception e) {

        e.printStackTrace();

   }

3 例子demo源码

java代码

package mm.shandong.com.testassets;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class MainActivity extends AppCompatActivity {
    WebView webView;
    TextView textView1;
    ListView listView;
    ImageView imageView;
    TextView textView2;
    ImageView imageView2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webView);
        textView1 = (TextView) findViewById(R.id.textView1);
        textView2 = (TextView) findViewById(R.id.textView2);
        listView = (ListView) findViewById(R.id.listView);
        imageView = (ImageView) findViewById(R.id.imageView);
        imageView2 = (ImageView) findViewById(R.id.imageView2);
    }
    ///从assets中获取图片资源
    public void getImage(View view) {
        try {
            InputStream in = getAssets().open("blue.png");
            Bitmap bitmap = BitmapFactory.decodeStream(in);
            imageView.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    ///从Raw中获取图片资源
    public void getRawImage(View view) {
        InputStream in = getResources().openRawResource(R.raw.red);
        Bitmap bitmap = BitmapFactory.decodeStream(in);
        imageView2.setImageBitmap(bitmap);

    }
    ///从assets中获取所有文件的文件名
    public void getAllFileNames(View view) {
        try {
            String[] fileNames = getAssets().list("");
            ArrayAdapter arrayAdapter =
                    new ArrayAdapter(this,
                            android.R.layout.simple_list_item_1,
                            fileNames);
            listView.setAdapter(arrayAdapter);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
   ///从Raw中获取文本文件
    public void getRawTxt(View view) {

        String str = readFromRaws(R.raw.rawtest);
        textView2.setText(str);
    }
  //从assets中获取文本文件
    public void getTxt(View view) {
        String str = readFromAssets("assetstest.txt");
        textView1.setText(str);
    }
   ///读取Raw目录下的文件
    public String readFromRaws(int resource_id) {
        try {
            InputStream inputStream = getResources().openRawResource(resource_id);
            byte[] buf = new byte[1024];
            int len = 0;
            ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
            while ((len = inputStream.read(buf)) != -1) {
                byteArrayOutputStream.write(buf, 0, len);
            }
            byte[] result = byteArrayOutputStream.toByteArray();
            String str = new String(result, "utf-8");
            return str;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
  ///读取asset下的文件
    public String readFromAssets(String name) {
        try {
            InputStream inputStream = getAssets().open(name);
            byte[] buf = new byte[1024];
            int len = 0;
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            while ((len = inputStream.read(buf)) != -1) {
                byteArrayOutputStream.write(buf, 0, len);
            }
            byte[] result = byteArrayOutputStream.toByteArray();
            String str = new String(result, "utf-8");
            return str;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
   //从assets中获取html文件
    public void getHtml(View view) {
        webView.loadUrl("file:///android_asset/www/assetstest.html ");

    }
}

布局文件

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getHtml"
            android:text="点击我加载assets目录下的html"
            android:textAllCaps="false" />

        <WebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="230dp"></WebView>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getTxt"
            android:text="通过AassetManager加载assets
            目录下的文件assetstest.txt"
            android:textAllCaps="false" />
        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getAllFileNames"
            android:text="通过AassetManager列出assets
            目录下的所有文件以及文件夹"
            android:textAllCaps="false" />

        <mm.shandong.com.testassets.myui.NoScrollListView
            android:id="@+id/listView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </mm.shandong.com.testassets.myui.NoScrollListView>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getImage"
            android:text="读取assets目录下的图片,用imageView显示"
            android:textAllCaps="false" />
        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getRawTxt"
            android:text="读取raw文件夹下的文件rawtest.txt"
            android:textAllCaps="false" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="getRawImage"
            android:text="读取raw目录下的图片,用imageView显示"
            android:textAllCaps="false" />

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</ScrollView>



 本人微博:honey_11

最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:例子代码,源码例子文档一网打尽


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值