在建立項目中一般會預設建立assets檔案,當然我們還可以在res檔案下面建立raw檔案夾,這裡面都可以存放一些圖片,音頻或者文本資訊,可以供我們在程式當中進行使用,不過他們兩個也有不同點;
assets下面的檔案不會被編譯,通過路徑可以去訪問其中的內容。raw中檔案會自動編譯,我們可以在R.java檔案中找到對應的ID,
看下面:
那麼既然這樣那我們平時該怎麼樣進行把資源放入這兩個檔案當中呢?
我個人平時喜歡比較檔案的大小,如果檔案比較大一點的會放入到aeests檔案中,因為用這個檔案檔案當中的資訊,相當於要去進行IO流操作,比較耗時的操作
其中比較重要的是擷取到Assets和Raw檔案夾中的資源方法:
Assets:AssetManager assetManager = getAssets();
Raw: InputStream inputStream = getResources().openRawResource(R.raw.demo);
下面該Demo的Activity原始碼:
package com.jiangqq.aeesrtandraw;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.content.res.AssetManager;
import android.os.Bundle;
import android.widget.EditText;
/**
* 該Demo示範Assets和Raw檔案夾中檔案的使用方法
*
* @author jiangqq
*
*/
public class AeesrtsAndRawActivity extends Activity {
private EditText et1, et2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
readAssets();
readRaw();
}
/**
* 使用Assets中的檔案
*/
private void readAssets() {
et1 = (EditText) findViewById(R.id.et1);
AssetManager assetManager = getAssets();
try {
InputStream inputStream = assetManager.open("demo.txt");
et1.setText(read(inputStream));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用Raw中的檔案
*/
private void readRaw() {
et2 = (EditText) findViewById(R.id.et2);
InputStream inputStream = getResources().openRawResource(R.raw.demo);
et2.setText(read(inputStream));
}
/**
* 進行IO流讀寫
*
* @param inputStream
* @return oStream.toString() or “檔案讀寫失敗”
*/
private String read(InputStream inputStream) {
try {
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
int length;
while ((length = inputStream.read()) != -1) {
oStream.write(length);
}
return oStream.toString();
} catch (IOException e) {
return "檔案讀寫失敗";
}
}
}
布局檔案:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/et1" />
<EditText
android:id="@+id/et1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/et2" />
<EditText
android:id="@+id/et2"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>Demo運行效果:
這樣就OK了。
url:http://greatverve.cnblogs.com/archive/2012/01/09/android-assets-res.html