assets文件夹资源的访问:
assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。
1. 先在Activity里面调用getAssets() 来获取AssetManager引用。
2. 再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStream。
3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close() 。
4.调用AssetManager.close() 关闭AssetManager。
需要注意的是,来自Resources和Assets 中的文件只可以读取而不能进行写的操作
以下为从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();
}
}
以下为直接从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();
}
}
简单点就是:
//assets目录中的资源需要直接使用文件名来引用,例如asses/xyz.xml、assets/abc/test.db是assets目录中的两个资源文件
//,其中abc是assets中的子目录,可以使用如下的代码引用这两个资源,并返回与资源对应的inputstream对象
//第一种方式:直接放在assets目录下
InputStream in=getResources().getAssets().open("t1.txt");
//第二种方式:在assets目录下自定义了新的目录(1的文件夹中t1.txt)
//InputStream in=getResources().getAssets().open("1/t1.txt");
下面是自己写的一个小的示例:
xml文件:(只用到了textview)
<LinearLayout 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"
android:orientation="vertical"
tools:context="com.example.sendmessage.MainActivity" >
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/sendEdit1"
android:hint="@string/sendEdit1"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/add"
android:text="@string/add"
/>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/sendEdit2"
android:hint="@string/sendEdit2"
/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/send"
android:text="@string/send"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/ textview"
/>
</LinearLayout>
activity文件:
package com.example.sendmessage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.util.EncodingUtils;
import android.app.Activity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
//private EditText sendEdit1,sendEdit2;
//private Button add,send;
private TextView textview;
private String result;//用来接收txt文本
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//sendEdit1 = (EditText) findViewById(R.id.sendEdit1);
//sendEdit2 = (EditText) findViewById(R.id.sendEdit2);
//add = (Button) findViewById(R.id.add);
//send = (Button) findViewById(R.id.send);
//send.setOnClickListener(new SendListener());
//显示assests下的txt文件
textview = (TextView) findViewById(R.id.textview);
textview.setText("text:"+getFromAssets("1.txt"));
}
//从assets 文件夹中获取文件并读取数据
public String getFromAssets(String fileName){
String result = "";
try {
InputStream in = getResources().getAssets().open(fileName);
//获取文件的字节数
int lenght = in.available();
//创建byte数组
byte[] buffer = new byte[lenght];
//将文件中的数据读到byte数组中
in.read(buffer);
result = EncodingUtils.getString(buffer, "GBK");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
题外话:(因为我实现的时候出现了乱码)
GBK编码:是指中国的中文字符,其它它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字符仅能存储简体中文字符。
UTF-8编码:它是一种全国家通过的一种编码,如果你的网站涉及到多个国家的语言,那么建议你选择UTF-8编码。
GBK和UTF8有什么区别?
UTF8编码格式很强大,支持所有国家的语言,正是因为它的强大,才会导致它占用的空间大小要比GBK大,对于网站打开速度而言,也是有一定影响的。
GBK编码格式,它的功能少,仅限于中文字符,当然它所占用的空间大小会随着它的功能而减少,打开网页的速度比较快。