Android中讀取assets目錄下的檔案詳細介紹
前言
Android 中資源分為兩種,
一種是res
下可編譯的資原始檔, 這種資原始檔系統會在R.java
裡面自動生成該資原始檔的ID
,訪問也很簡單,只需要呼叫R.XXX.id
即可;
第二種就是放在assets
資料夾下面的原生資原始檔,放在這個資料夾下面的檔案不會被R檔案編譯,所以不能像第一種那樣直接使用.Android
提供了一個工具類,方便我們操作獲取assets
檔案下的檔案:AssetManager
AssetManager
AssetManager
提供瞭如下方法用於處理assets
:
String[] list(String path);//列出該目錄下的下級檔案和資料夾名稱
InputStream open(String fileName);//以順序讀取模式開啟檔案,預設模式為ACCESS_STREAMING
InputStream open(String fileName, int accessMode);//以指定模式開啟檔案。讀取模式有以下幾種:
//ACCESS_UNKNOWN : 未指定具體的讀取模式
//ACCESS_RANDOM : 隨機讀取
//ACCESS_STREAMING : 順序讀取
//ACCESS_BUFFER : 快取讀取
void close()//關閉AssetManager例項
使用
assets
目錄下主要存放四種檔案:文字檔案、影象檔案、網頁檔案(包括html
中引用的js/ccs/jpg
等資源)、音訊視訊檔案,下面通過具體的案例分別來說下怎麼獲取
載入assets
目錄下的網頁
webView.loadUrl("file:///android_asset/html/index.html");
說明:這種方式可以載入assets
目錄下的網頁,並且與網頁有關的css,js,圖片等檔案也會的載入。
載入assets
目錄下的圖片資源
InputStream is = getAssets().open(fileName);
bitmap = BitmapFactory.decodeStream(is);
ivImg.setImageBitmap(bitmap);
載入assets目錄下文字檔案
InputStream is = getAssets().open(fileName);
int lenght = is.available();
byte[] buffer = new byte[lenght];
is.read(buffer);
String result = = new String(buffer, "utf8");
載入assets
目錄下音樂
// 開啟指定音樂檔案,獲取assets目錄下指定檔案的AssetFileDescriptor物件
AssetFileDescriptor afd = am.openFd(music);
mPlayer.reset();
// 使用MediaPlayer載入指定的聲音檔案。
mPlayer.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
// 準備聲音
mPlayer.prepare();
// 播放
mPlayer.start();
補充下:Android
中還有另外一個資料夾raw
,和assets
差不多,也不會被R
檔案編譯,但是raw
下不能在建資料夾,assets
檔案下是可以在建資料夾的,下面是獲取raw
資料夾下資源的方法:
InputStream is = getResources().openRawResource(R.id.filename);
將assets
下的檔案複製到SD
卡中
程式碼取自網上
/**
* 從assets目錄中複製整個資料夾內容
* @param context Context 使用CopyFiles類的Activity
* @param oldPath String 原檔案路徑 如:/aa
* @param newPath String 複製後路徑 如:xx:/bb/cc
*/
public void copyFilesFassets(Context context,String oldPath,String newPath) {
try {
String fileNames[] = context.getAssets().list(oldPath);//獲取assets目錄下的所有檔案及目錄名
if (fileNames.length > 0) {//如果是目錄
File file = new File(newPath);
file.mkdirs();//如果資料夾不存在,則遞迴
for (String fileName : fileNames) {
copyFilesFassets(context,oldPath + "/" + fileName,newPath+"/"+fileName);
}
} else {//如果是檔案
InputStream is = context.getAssets().open(oldPath);
FileOutputStream fos = new FileOutputStream(new File(newPath));
byte[] buffer = new byte[1024];
int byteCount=0;
while((byteCount=is.read(buffer))!=-1) {//迴圈從輸入流讀取 buffer位元組
fos.write(buffer, 0, byteCount);//將讀取的輸入流寫入到輸出流
}
fos.flush();//重新整理緩衝區
is.close();
fos.close();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//如果捕捉到錯誤則通知UI執行緒
MainActivity.handler.sendEmptyMessage(COPY_FALSE);
}
}
例項效果圖
相關文章
- java讀取resouces目錄下檔案Java
- Android中Context的詳細介紹AndroidContext
- Linux中/proc目錄下檔案詳解Linux
- 8.var目錄下的檔案和目錄詳解
- Android的.so檔案詳細解讀Android
- Android 程式目錄介紹Android
- Qt 檔案模型(QFileSystemModel)詳細介紹QT模型
- 10g Oracle檔案及目錄介紹Oracle
- Unity Assets目錄下的資料夾用途Unity
- [轉帖]linux的tmpfs和/dev/shm目錄的詳細介紹Linuxdev
- 將assets目錄下的資料庫檔案拷貝到當前應用程式下的files目錄下,並載入使用資料庫
- Linux下的目錄介紹(轉)Linux
- Linux下的目錄介紹(zt)Linux
- Clion中C++使用當前目錄讀取檔案失敗C++
- Android SDK目錄結構介紹Android
- Macbook磁碟系統結構/檔案/目錄介紹分析Mac
- Linux下udev詳細介紹Linuxdev
- vue獲取目錄下的檔名Vue
- Unity Assets目錄下的特殊資料夾名稱Unity
- Linux下的目錄介紹[全精](轉)Linux
- js中typeof用法詳細介紹JS
- PHP超低記憶體遍歷目錄檔案和讀取超大檔案PHP記憶體
- py目錄下獲取指定字尾檔案打包成zip檔案
- jmeter 引數化 csv外掛的讀取檔案 bin目錄JMeter
- 指定目錄下的所有檔案中的字串替換字串
- javaScript系列:js中獲取時間new Date()詳細介紹JavaScriptJS
- Linux中目標與檔案的編輯管理(詳細)Linux
- ORACLE directory 目錄讀寫檔案Oracle
- Android R檔案介紹Android
- 獲取裝置上的某個目錄下的所有檔案
- Linux下ulimit命令的詳細使用介紹LinuxMIT
- 《非常防護》專案詳細介紹
- Android SDK目錄結構和工具介紹Android
- 獲取Linux系統中目錄檔案大小的方法Linux
- Python獲取當前目錄下所有檔案的絕對路徑並儲存在檔案中Python
- 遍歷目錄下的所有檔案
- 注意放在/tmp目錄下的檔案
- Linux中如何檢視目錄下的檔案大小?Linux