麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統(tǒng) > Android > 正文

Android實(shí)現(xiàn)復(fù)制Assets文件到SD卡

2019-10-21 21:32:15
字體:
供稿:網(wǎng)友

Assets文件介紹

assets文件夾里面的文件都是保持原始的文件格式,需要用AssetManager以字節(jié)流的形式讀取文件。 

1. 先在Activity里面調(diào)用getAssets() 來獲取AssetManager引用。 
2. 再用AssetManager的open(String fileName, int accessMode) 方法則指定讀取的文件以及訪問模式就能得到輸入流InputStream。 
3. 然后就是用已經(jīng)open file 的inputStream讀取文件,讀取完成后記得inputStream.close() 。 
4. 調(diào)用AssetManager.close() 關(guān)閉AssetManager。

封裝類

代碼遵循單例模式,例如:

import android.content.Context;import android.os.Environment;import android.os.Handler;import android.os.Looper;import android.os.Message;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;/** * Created by shenhua on 1/17/2017. * Email [email protected] */public class FileUtils { private static FileUtils instance; private static final int SUCCESS = 1; private static final int FAILED = 0; private Context context; private FileOperateCallback callback; private volatile boolean isSuccess; private String errorStr; public static FileUtils getInstance(Context context) {  if (instance == null)   instance = new FileUtils(context);  return instance; } private FileUtils(Context context) {  this.context = context; } private Handler handler = new Handler(Looper.getMainLooper()) {  @Override  public void handleMessage(Message msg) {   super.handleMessage(msg);   if (callback != null) {    if (msg.what == SUCCESS) {     callback.onSuccess();    }    if (msg.what == FAILED) {     callback.onFailed(msg.obj.toString());    }   }  } }; public FileUtils copyAssetsToSD(final String srcPath, final String sdPath) {  new Thread(new Runnable() {   @Override   public void run() {    copyAssetsToDst(context, srcPath, sdPath);    if (isSuccess)     handler.obtainMessage(SUCCESS).sendToTarget();    else     handler.obtainMessage(FAILED, errorStr).sendToTarget();   }  }).start();  return this; } public void setFileOperateCallback(FileOperateCallback callback) {  this.callback = callback; } private void copyAssetsToDst(Context context, String srcPath, String dstPath) {  try {   String fileNames[] = context.getAssets().list(srcPath);   if (fileNames.length > 0) {    File file = new File(Environment.getExternalStorageDirectory(), dstPath);    if (!file.exists()) file.mkdirs();    for (String fileName : fileNames) {     if (!srcPath.equals("")) { // assets 文件夾下的目錄      copyAssetsToDst(context, srcPath + File.separator + fileName, dstPath + File.separator + fileName);     } else { // assets 文件夾      copyAssetsToDst(context, fileName, dstPath + File.separator + fileName);     }    }   } else {    File outFile = new File(Environment.getExternalStorageDirectory(), dstPath);    InputStream is = context.getAssets().open(srcPath);    FileOutputStream fos = new FileOutputStream(outFile);    byte[] buffer = new byte[1024];    int byteCount;    while ((byteCount = is.read(buffer)) != -1) {     fos.write(buffer, 0, byteCount);    }    fos.flush();    is.close();    fos.close();   }   isSuccess = true;  } catch (Exception e) {   e.printStackTrace();   errorStr = e.getMessage();   isSuccess = false;  } } public interface FileOperateCallback {  void onSuccess();  void onFailed(String error); }}

調(diào)用代碼

如果你需要將如圖所示的apks下的文件復(fù)制到SD卡的app/apks目錄下,則這樣調(diào)用:

Android,復(fù)制,Assets,SD卡

FileUtils.getInstance(Context context).copyAssetsToSD("apks","app/apks");

###如果你需要收到文件復(fù)制完成的時(shí)的回調(diào),則使用如下代碼:

FileUtils.getInstance(Context context).copyAssetsToSD("apks","app/apks").setFileOperateCallback(new FileUtils.FileOperateCallback() { @Override  public void onSuccess() {  // TODO: 文件復(fù)制成功時(shí),主線程回調(diào)   }   @Override   public void onFailed(String error) {    // TODO: 文件復(fù)制失敗時(shí),主線程回調(diào)   }  });

代碼說明

在上面代碼中,通過單例模式傳入一個(gè)context獲得FileUtils實(shí)例,通過實(shí)例去調(diào)用copyAssetsToSD()方法,方法參數(shù):

  • String srcPath 傳入assets文件夾下的某個(gè)文件夾名,如上述apks,可傳入為空”“字符,則復(fù)制到SD后,默認(rèn)將assets文件夾下所有文件復(fù)制;
  • String sdPath 傳入你希望將文件復(fù)制到的位置,如SD卡下的“abc”文件夾,則傳入”abc”

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲一区二区国产 | 免费午夜视频 | 日本免费一区二区三区四区 | 看免费5xxaaa毛片| 精品国产一区二区三区四区在线 | 在线观看91精品 | 日韩激情一区二区三区 | 成人在线第一页 | 久久精品伊人网 | 国产精品jk白丝蜜臀av软件 | 在线区 | av电影在线播放 | 欧美日韩亚洲另类 | 草操视频 | 91麻豆精品国产91久久久无需广告 | 中文字幕在线第二页 | 国产亚洲精品视频中文字幕 | 亚洲欧美aⅴ | 日韩字幕在线观看 | 欧美人的天堂一区二区三区 | 国产一区二区免费看 | 亚洲第五色综合网 | 成人 日韩 | 久久精品一区二区三区不卡牛牛 | 久久蜜桃精品一区二区三区综合网 | 欧美乱淫| 亚洲四播房 | 欧美一级在线看 | 国产精品久久久久久久av三级 | 二区三区四区视频 | 精品久久久久久国产 | 日本在线免费观看 | 古装三级在线观看 | 久久中文一区 | 国产亚洲美女精品久久久2020 | 欧美精品v国产精品v日韩精品 | 7777在线观看 | 成人一区二区三区四区 | 日韩视频一区 | 日日爱99| 请播放一级毛片 |