當前位置:首頁 » 安卓系統 » androidassets文件拷貝

androidassets文件拷貝

發布時間: 2025-03-17 22:46:53

『壹』 如何獲取android assets文件下的mp4

assets文件夾是android程序中存放相關外部文件的一個目錄,Android官方提供了相應的方法去訪問該文件夾中的內容,故此我們並不需要進行相關的路徑判斷等代碼操作,直接調用相關方法打開文件並得到一個位元組輸入流(InputStream);
然後通過相應的字元編碼方式讀取位元組解碼為字元輸入流(InputStreamReader);再通過BufferReader對字元輸入流讀取文本並將字元存入緩沖區以便能提供字元、數組和線段的高效讀取;最後我們就能逐行對文件內容進行讀取了;
public class MainActivity extends Activity {

『貳』 Android中assets目錄和raw目錄的區別和使用情況

今天看到有人問Android中assets目錄和raw目錄的區別和使用情況。

能提出這個問題的,應該都了解它們的共同點:

它們會被原封不動的拷貝到APK中,而不會像其它資源文件那樣被編譯成二進制的形式。

要說區別,當然最直觀的就是獲取它們的InputStream的API不一樣了。

assets:InputStream assets = getAssets().open("xxxx");

raw:InputStream raw = getResources().openRawResource(R.raw.xxxx)

有人可能會有疑問,既然它們都是被原封不動的拷貝到APK中,而assets可以創建目錄結構,又能夠動態的列出assets中的所有資源getAssets().list(String path);,這些raw都做不到,那raw還有什麼用呢?

下面我們來說說它們主要的區別:

由 於raw是Resources (res)的子目錄,Android會自動的為這目錄中的所有資源文件生成一個ID,這個ID會被存儲在R類當中,作為一個文件的引用。這意味著這個資源 文件可以很容易的被Android的類和方法訪問到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是訪問一個文件最快捷的方式。MP3和Ogg文件放在這個目錄下是比較合適 的。
assets目錄更像一個附錄類型的目錄,Android不會為這個目錄中的文件生成ID並保存在R類當中,因此它與 Android中的一些類和方法兼容度更低。同時,由於你需要一個字元串路徑來獲取這個目錄下的文件描述符,訪問的速度會更慢。但是把一些文件放在這個目 錄下會使一些操作更加方便,比方說拷貝一個資料庫文件到系統內存中。要注意的是,你無法在Android XML文件中引用到assets目錄下的文件,只能通過AssetManager來訪問這些文件。資料庫文件和游戲數據等放在這個目錄下是比較合適的。
另 外,網上關於assets和raw的資料都千篇一律了,因此關於這兩者中單個文件大小不能超過1M的**錯誤**描述也在傳播,即如果讀取超過1M的文件 會報"Data exceeds UNCOMPRESS_DATA_MAX (1314625 vs 1048576)"的IOException,還引申出種種解決方案。個人認為不應該有這樣的限制,為了驗證這個說法寫了個Demo,發現將近5M的壓縮 包在assets和raw中都能正常訪問,因此在這里糾正一下,理論上只要打包不超過Android APK 50M大小的限制都是沒有問題的。當然了,不排除是Android很早期的時候因為設備硬體原因aapt在編譯的時候對這兩個文件夾大小做出了限制,如果 是這樣,較新版的ADT應該不會出現這種情況。

更新:為了驗證我最後一段的描述,避免導致結果誤 導,晚上寫了幾個小Demo驗證之後又花了點時間查閱了一些資料,最後找到這篇文章http://ponystyle.com/blog/2010/03 /26/dealing-with-asset-compression-in-android-apps/ ,文章比較簡單清晰,我就不翻譯了。這篇文章應該還蠻有說服力的,從根本上說明了當時Android2.3以前產生資源文件單個文件大小不能超過1M的原 因和部分解決方法。不過由於限制是當時的aapt決定的,現在已經更新了多個版本的aapt已經不存在這種問題了,也印證了我最後一段的猜想。

『叄』 Android讀取assets目錄下的視屏資源

在Android
應用中使用assets目錄下存放的
資源文件
,assets目錄下存放的資源代表應用無法直接訪問的原生資源,應用程序通過AssetManager以二進制流的形式來讀取資源。

『肆』 android assets文件占內存嗎

android assets的文件夾會佔用文件大小的,一般都不允許超過1M,可以通過如下方式解決:
比如在assets目錄下放置了一個「test.zip」的資源。當apk安裝之後,可能我就需要訪問這個"test.zip"資源文件。(可能我會去解壓到某處)
在網上找了很長時間,說什麼在assets下的資源怎麼怎麼不能超過1M、或者要分成多個不超過1M的小文件,然後用的時候在拼成一個大文件、說什麼要用到什麼資料庫。總之說的,感覺沒有一個有用的。
於是自己就實現了一個從assets下拷貝資源到sd卡中的一個功能。這里不限制非得拷貝到sd卡中。
之所以要拷貝出來,是因為在assets內的資源隨apk安裝之後,不好訪問。所以想拷貝到一個容易訪問的地方。比如是一個assets下的是一個zip文件,為需要在安裝之後進行解壓。而解壓的時候我又想使用 ant.jar (支持編碼) 。於是我先將zip資源拷貝到一個地方,然後在進行解壓。

『伍』 Android開發問題怎麼解決

  1. R.java消失或解析異常

  2. 自定義title欄

  3. SQLite isFirst和isBeforeFirst方法的區別

  4. eclipse刪除空行

  5. getX()和getRawX()的區別

  6. imagView居中顯示問題

  7. synchronized引發了 java.util.

  8. 獲取隨機顏色

  9. 去掉Activity的標題欄,全屏顯示

  10. 如何修改應用名稱及應用圖標

  11. 關於調試方法

  12. Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.

  13. android.content.res.Resources.loadXmlResourceParser

  14. android.content.res.Resources$NotFoundException

  15. 交互性的button定義的方法

  16. 在超級終端中執行程序報錯-Permission deny

  17. 從svn導入工程項目有驚嘆號

  18. 從svn導入工程項目有驚嘆號

  19. 首次進入帶有EditText的Activity不自動彈出軟鍵盤,再次點擊才彈

  20. Gallery中OnItemClickListener與OnItemSelectedListener的區別

  21. Eclipse中簽名導出apk崩潰,手動簽名

  22. android.view.InflateException: Binary XML file line #異常的解決

  23. 將assets文件夾中的壓縮包拷貝到sdcard中(不限大小)

  24. 判斷是否有root許可權

  25. 最簡單的Root 模擬器的方法

  26. 新版ADT開啟eclipse提示 "Running Android Lint" has encountered a problem

  27. 新版ADT開啟eclipse提示cannot open libstdc++.so.6..

  28. 無法升級ADT

『陸』 Android assets文件夾

assets目錄下的文件在打包後會原封不動的保存在apk包中,不會被編譯成二進制,assets目錄下可以再建立文件夾,assets文件夾下的文件不會被映射到R.java中,訪問的時候需要AssetManager類

『柒』 如何打開assets文件夾中的apk

在自己的app中安裝assets目錄下的apk文件的方法:

詳細過程如下:

{

ContextmContext;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mContext=this;

//Toast.makeText(this,""+Environment.getExternalStorageDirectory().getAbsolutePath(),0).show();

if(ApkFromAssets(this,"test.apk",Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.apk")){

Builderm=newAlertDialog.Builder(mContext)

.setIcon(R.drawable.ic_launcher).setMessage("是否安裝?")

.setIcon(R.drawable.ic_launcher)

.setPositiveButton("yes",newOnClickListener(){

@Override

publicvoidonClick(DialogInterfacedialog,intwhich){

Intentintent=newIntent(Intent.ACTION_VIEW);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setDataAndType(Uri.parse("file://"+Environment.getExternalStorageDirectory().getAbsolutePath()+"/test.apk"),

"application/vnd.android.package-archive");

mContext.startActivity(intent);

}

});

m.show();

}

}

publicbooleanApkFromAssets(Contextcontext,StringfileName,Stringpath){

booleanIsFinish=false;

try{

InputStreamis=context.getAssets().open(fileName);

Filefile=newFile(path);

file.createNewFile();

FileOutputStreamfos=newFileOutputStream(file);

byte[]temp=newbyte[1024];

inti=0;

while((i=is.read(temp))>0){

fos.write(temp,0,i);

}

fos.close();

is.close();

IsFinish=true;

}catch(IOExceptione){

e.printStackTrace();

}

returnIsFinish;

}

}

『捌』 android 百度地圖離線地圖包怎麼用

1.首先把離線地圖放在android工程下的assets裡面。
注意:建議離線地圖下載通過網路地圖APIDEMO去下載,因為到官網上下載的離線地圖文件格式不一樣,APIDEMO的格式是.dat,而官網上的格式是.dat_svc有可能載入不了地圖.
2.把離線地圖從assets下拷貝到sd卡下
public static void (Context context) {
try {
String filepath = Environment.getExternalStorageDirectory() + "/"
+ "BaiMapSDK" + "/" + "vmp" + "/" + "h" + "/"
+ "xxxxx.dat";
String path = Environment.getExternalStorageDirectory() + "/"
+ "BaiMapSDK" + "/" + "vmp" + "/" + "h" + "/";
File file = new File(path);
if (!file.exists()) {
file.mkdir();
}
if (!(new File(filepath)).exists()) {
new File(filepath).createNewFile();
InputStream is = context.getAssets().open(
"xxxx.dat");
FileOutputStream fos = new FileOutputStream(filepath);
byte[] buffer = new byte[8192];
int count = 0;
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
3.初始化離線地圖
private MKOfflineMap mOffline = null;
MapController mMapController;
mMapController = mMapView.getController();
mOffline = new MKOfflineMap();
mOffline.init(mMapController, new MKOfflineMapListener() {
@Override
public void onGetOfflineMapState(int type, int state) {
// TODO Auto-generated method stub
switch (type) {
case MKOfflineMap.TYPE_DOWNLOAD_UPDATE: {
}
break;
case MKOfflineMap.TYPE_NEW_OFFLINE:
break;
case MKOfflineMap.TYPE_VER_UPDATE:
break;
}
}
});

『玖』 android 怎麼讀取res下的xml

相當於讀取res下面的文件,讀取成string類型,然後在通過xml解析器解析就行。下面是讀取res下面文件的例子,請看截圖,例子來自android學習手冊,android學習手冊,裡面有源碼。android學習手冊包含9個章節,108個例子,源碼文檔隨便看,例子都是可交互,可運行,源碼採用android studio目錄結構,高亮顯示代碼,文檔都採用文檔結構圖顯示,可以快速定位。360手機助手中下載,圖標上有貝殼

方法一、將要讀取的txt文件拷貝到Android工程目錄下的assets文件夾下

方法二、在res文件夾下新建raw文件夾,將txt拷貝到該目錄下


本方法是從assets中讀取


/**
* 從assets中讀取txt
*/
private void readFromAssets() {
try {
InputStream is = getAssets().open("qq.txt");
String text = readTextFromSDcard(is);
textView.setText(text);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}



本方法是從raw中讀取


/**
* 從raw中讀取txt
*/
private void readFromRaw() {
try {
InputStream is = getResources().openRawResource(R.raw.qq);
String text = readTextFromSDcard(is);
textView.setText(text);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

本方法是解析輸入流,返回txt中的字元串



/**
* 按行讀取txt
*
* @param is
* @return
* @throws Exception
*/
private String readTextFromSDcard(InputStream is) throws Exception {
InputStreamReader reader = new InputStreamReader(is);
BufferedReader bufferedReader = new BufferedReader(reader);
StringBuffer buffer = new StringBuffer("");
String str;
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
buffer.append(" ");
}
return buffer.toString();
}


熱點內容
社會腳本法定義 發布:2025-03-18 03:59:00 瀏覽:326
安卓擴展存儲空間 發布:2025-03-18 03:57:34 瀏覽:9
linuxat沒反應 發布:2025-03-18 03:56:51 瀏覽:581
怎麼看是多少位編譯器 發布:2025-03-18 03:47:32 瀏覽:660
solr索引存儲 發布:2025-03-18 03:46:52 瀏覽:330
縫合演算法 發布:2025-03-18 03:46:06 瀏覽:363
java遍歷二維數組 發布:2025-03-18 03:36:01 瀏覽:411
銳捷源碼 發布:2025-03-18 03:26:55 瀏覽:436
訴訟中止裁定後可否解壓 發布:2025-03-18 03:24:51 瀏覽:128
sqlserver全文搜索 發布:2025-03-18 03:23:58 瀏覽:715