Android资源文件在配置文件中的使用
Android資源文件大致可以分為兩種:
第一種是res目錄下存放的可編譯的資源文件:
這種資源文件系統會在R.Java里面自動生成該資源文件的ID,所以訪問這種資源文件比較簡單,通過R.XXX.ID即可;
第二種是assets目錄下存放的原生資源文件:
因為系統在編譯的時候不會編譯assets下的資源文件,所以我們不能通過R.XXX.ID的方式訪問它們。那我么能不能通過該資源的絕對路徑去訪問它們呢?因為apk安裝之后會放在/data/app/**.apk目錄下,以apk形式存在,asset/res和被綁定在apk里,并不會解壓到/data/data/YourApp目錄下去,所以我們無法直接獲取到assets的絕對路徑,因為它們根本就沒有。
還好android系統為我們提供了一個AssetManager工具類。
查看官方API可知,AssetManager提供對應用程序的原始資源文件進行訪問;這個類提供了一個低級別的API,它允許你以簡單的字節流的形式打開和讀取和應用程序綁定在一起的原始資源文件。???
Android除了提供/res目錄存放資源文件外,在/assets目錄也會提供存放資源文件,在/assets目錄下面不會在R.java里面自動生成ID,所以讀取assets目錄下面的資源文件需要提供路徑,我們可以通過AssetManager類來訪問這些文件。
?
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();
}
}
?
接下來舉個例子
我們新建一個工程文件,命名為AssetsDemo。
?
然后建立一個布局文件,如下,很簡單,無需我多介紹,大家一看就明白。
然后呢,我從網上找了段文字,存放在assets文件目錄下,取名為health.txt 這就是今天我們要讀取的文件啦。
health.txt可以自己寫點內容放進assets文件夾下就可以了。
接下來,就是今天的重頭戲,Android讀取文件的核心代碼。就直接貼代碼了。
package com.assets.cn;
import java.io.InputStream;
import org.apache.http.util.EncodingUtils;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;
public class AssetsDemoActivity extends Activity {
public static final String ENCODING = "UTF-8";
TextView tv1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv1 = (TextView)findViewById(R.id.tv1);
tv1.setTextColor(Color.BLACK);
tv1.setTextSize(25.0f);
tv1.setText(getFromAssets("health.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, ENCODING);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
一、assets和raw目錄
1. assets。assets類資源放在工程根目錄的assets子目錄下,它里面保存的是一些原始的文件,可以以任何方式來進行組織。這些文件最終會被原裝不動地打包在apk文件中。如果我們要在程序中訪問這些文件,那么就需要指定文件名來訪問。例如,假設在assets目錄下有一個名稱為filename的文件,那么就可以使用以下代碼來訪問它:
2、raw。raw是res下的子目錄,?--raw。這類資源以任意格式的文件保存在res/raw目錄下,它們和assets類資源一樣,都是原裝不動地打包在apk文件中的,不過它們會被賦予資源ID,這樣我們就可以在程序中通過ID來訪問它們。例如,假設在res/raw目錄下有一個名稱為filename的文件,并且它在編譯的過程,被賦予的資源ID為R.raw.filename,那么就可以使用以下代碼來訪問它:
更詳細信息可參考大牛神作?http://blog.csdn.net/luoshengyang/article/details/8738877
?
二、其中properties資源文件的讀取
1. 如果放入了assets文件夾中,可以如下打開:?
Properties pro = new Properties();
InputStream is = context.getAssets().open("test.properties");
pro.load(is);
2. 如果放入到raw文件夾中,可以通過如下方式打開:?
InputStream is = context.getResources().openRawResource(R.raw.test);?
3. 如果沒有上下文住處,則可用java傳統的方式來打開:
? Properties pro = new Properties();
pro.load(FileLoad.class.getResourceAsStream("/assets/test.properties")); //或者/res/raw/test.properties
二、從下圖看出四種資源文件的格式與在配置文件中的使用
1.圖片資源文件前綴名不能使用大寫字母并且不能以數字開頭
2.顏色資源文件、尺寸資源文件和字符資源文件所在的目錄都必須是values,并且文件名是固定的,
? ?如下圖中示例
3.顏色資源文件、尺寸資源文件和字符資源文件的內容格式如下圖示例
4.四種資源文件在布局資源文件中的使用如下圖示例, 已經可以使用在AndroidManifest.xml文件中
二、Java代碼操作資源文件
1.操作資源文件的對象的獲取
? ? ?Resources?res?= context.getResources();??(getResources()實現方法是類Context中聲明的方法)
2.strings.xml資源文件被java代碼操作
? /** 第一種
? String school =res.getString(R.string.school);// 成都中心大學
? textView.setText(school);
? **/
? /** 第二種
? String school = context.getString(R.string.school);
? textView.setText(school);
? **/
? /**第三種
? textView.setText(R.string.school);
? */
3.colors.xml?資源文件被java代碼操作
? int myRed =res.getColor(R.color.my_red);?
? context.textView.setTextColor(myRed);
4. dimens.xml資源文件被java代碼操作
? float bigSize =?res.getDimension(R.dimen.bigSize);
? textView.setTextSize(bigSize);
?
5.圖片資源文件被java代碼操作
? (1)設置LinearLayout的背景
? /**第一種
? Drawable bc =res.getDrawable(R.drawable.bc);?
??linearLayout?.setBackgroundDrawable(bc);//設置背景圖片
? */
? /**第二種
? ?linearLayout?.setBackgroundResource(R.drawable.bc);
?*/
? (2)設置ImageView的src
? /**第一種
? Drawable bc =?res.getDrawable(R.drawable.xx);
??imageView.setImageDrawable(bc);
? */
? /**第二種
? Bitmap bitmap = BitmapFactory.decodeResource(res, R.drawable.xx);
??imageView.setImageBitmap(bitmap);
? */
? /**第三種
??imageView.setImageResource(R.drawable.xx);
?*/?
總結
以上是生活随笔為你收集整理的Android资源文件在配置文件中的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自动转换flv文件
- 下一篇: android上如何写配置文件