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);
}
}
例項效果圖
相關文章
- Qt 檔案模型(QFileSystemModel)詳細介紹QT模型
- 8.var目錄下的檔案和目錄詳解
- [轉帖]linux的tmpfs和/dev/shm目錄的詳細介紹Linuxdev
- Clion中C++使用當前目錄讀取檔案失敗C++
- Macbook磁碟系統結構/檔案/目錄介紹分析Mac
- kubernetes實戰篇之helm示例yaml檔案檔案詳細介紹YAML
- vue獲取目錄下的檔名Vue
- Android 13及以上如何備份Android/data目錄中的檔案Android
- Unity Assets目錄下的特殊資料夾名稱Unity
- Android讀取配置檔案的方法Android
- Linux中目標與檔案的編輯管理(詳細)Linux
- PHP超低記憶體遍歷目錄檔案和讀取超大檔案PHP記憶體
- py目錄下獲取指定字尾檔案打包成zip檔案
- opencv-python 讀取同一目錄的多個檔案OpenCVPython
- jmeter 引數化 csv外掛的讀取檔案 bin目錄JMeter
- 獲取Linux系統中目錄檔案大小的方法Linux
- Linux中如何檢視目錄下的檔案大小?Linux
- Flink發行包中 lib 目錄下的檔案作用
- 遍歷目錄下的所有檔案
- 《非常防護》專案詳細介紹
- 《蝙蝠的“自我修養”》專案詳細介紹
- Kafka詳細介紹Kafka
- javascript this詳細介紹JavaScript
- ApplicationContext 詳細介紹APPContext
- JDBC 詳細介紹JDBC
- Ifconfig詳細介紹
- Git詳細介紹Git
- MySQL 8.0 目錄介紹MySql
- 檔案或目錄損壞且無法讀取怎麼辦?
- gitignore 忽略目錄下檔案僅保留目錄形態Git
- 註解的詳細介紹
- Http Module 的詳細介紹HTTP
- 使用 adb 命令修改 Android/data 目錄下的檔案(給碧藍檔案國服吃布丁)Android
- 根據輸入的excel檔案地址讀取圖片名稱,遞迴匹配特定目錄下的圖片資訊並整理到指定的目錄下Excel遞迴
- Linux下如何對目錄中的檔案進行統計Linux
- 6.1檔案下載、讀取
- 【COVID-19中國疫情地圖】專案詳細介紹地圖
- php讀取大檔案詳解PHP