先看图片演示:
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
最后,以上例子都来源与安卓无忧,请去应用宝或者豌豆荚下载:例子代码,源码例子文档一网打尽