assets與res/raw不同
assets目錄是Android的一種特殊目錄,用於放置APP所需的固定文件,且該文件被打包到APK中時,不會被編碼到二進制文件。
Android還存在一種放置在res下的raw目錄,該目錄與assets目錄不同。
注意點:
1、 assets目錄不會被映射到R中,因此,資源無法通過R.id方式獲取,必須要通過AssetManager進行操作與獲取;res/raw目錄下的資源會被映射到R中,可以通過getResource()方法獲取資源。
2、 多級目錄:assets下可以有多級目錄,res/raw下不可以有多級目錄。
3、 編碼(都不會被編碼):assets目錄下資源不會被二進制編碼;res/raw應該也不會被編碼。
Android Studio 添加assets目錄的2種方法
main目錄上右擊:
1、 直接在src/main下新建assets目錄:
由於在工程創建時,在工程文件裏已經添加了對應的資源目錄說明:
Paste_Image.png
所以,天然的資源目錄。
2、 通過嚮導添加:
添加res/raw目錄:
添加完成。
assets內資源使用方法
1、 資源使用
AssetManager am = getAssets();
InputStream is = am.open("filename");
獲取到輸入流。
2、 信息獲取
通過am.list(“”)
得到assets目錄下的所有文件和子目錄名稱的數組,通過am.list(SubFolderName)
,得到assets/SubFolderName
下所有的文件和子目錄名稱的數組。
通過am.openFd(fileName)
得到的AssetFileDescriptor
對象來獲得fileName
文件的信息,例如長度等。
AssetFileDescriptor 能夠完成對文件的其他一些操作,可以關注該類。
AssetManager接口介紹:
final String[] list(String path) //返回指定路徑下的所有文件及目錄名
final InputStream open(String fileName) //使用 ACCESS_STREAMING模式打開assets下的指定文件
final InputStream open(String fileName, int accessMode) //使用顯示的訪問模式打開assets下的指定文件
簡單應用:
1、結合WebView加載assets目錄下的網頁:
//加載assets/win8_Demo/目錄下的index.html網頁
webView.loadUrl("file:///android_asset/helloworld.html");
說明:可加載assets目錄下的網頁,css,js,圖片等文件也會的加載。
assets中複製文件方法
public boolean copyFilesFassetsTan(Context context, String newPath) {
int successNum = 0;
L.w("tan", "begin");
String[] fileNames = {"rnsb1.mp4", "clsb2.mp4", "kzjc3.mp4", "lsjc4.mp4", "qdlj5.mp4"
, "aqmjc6.mp4", "aqfjc7.mp4", "wxjc8.mp4", "xyjc9.mp4", "djh10.mp4", "mjrq11.mp4"};
try {//
for (String fileName : fileNames) {
InputStream is = context.getAssets().open(fileName);
FileOutputStream fos = new FileOutputStream(new File(newPath + "/" + fileName));
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();
successNum++;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
//如果捕捉到錯誤則通知UI線程
//MainActivity.handler.sendEmptyMessage(COPY_FALSE);
}
L.w("tan", "end");
if (successNum == fileNames.length) {
return true;
} else {
return false;
}
}
res/raw資源使用
InputStream is = getResources().openRawResource(R.id.fileNameID) ;
//R.id.fileNameID
爲需要訪問的文件對應的資源ID
獲取到輸入流,即可使用。
VideoView播放:
VideoView.setVideoUri(Uri.parse("android.resource://" + getpackageName() + "/" + R.raw.movie));
作者:heguorui
鏈接:https://www.jianshu.com/p/5974fcf88170
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。