国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現復制Assets文件到SD卡

2019-10-21 21:32:15
字體:
來源:轉載
供稿:網友

Assets文件介紹

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

1. 先在Activity里面調用getAssets() 來獲取AssetManager引用。 
2. 再用AssetManager的open(String fileName, int accessMode) 方法則指定讀取的文件以及訪問模式就能得到輸入流InputStream。 
3. 然后就是用已經open file 的inputStream讀取文件,讀取完成后記得inputStream.close() 。 
4. 調用AssetManager.close() 關閉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 shenhuanet@126.com */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); }}

調用代碼

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

Android,復制,Assets,SD卡

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

###如果你需要收到文件復制完成的時的回調,則使用如下代碼:

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

代碼說明

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 富蕴县| 星子县| 大连市| 宁乡县| 华安县| 阿合奇县| 新干县| 金坛市| 法库县| 尼勒克县| 乾安县| 左云县| 成武县| 资兴市| 南和县| 乐清市| 射阳县| 柘荣县| 泰宁县| 潜江市| 乌拉特中旗| 水城县| 茶陵县| 乐安县| 肥东县| 绵阳市| 牟定县| 阜康市| 游戏| 伽师县| 新和县| 富阳市| 开平市| 大荔县| 吐鲁番市| 嘉义县| 双流县| 和田市| 武陟县| 青河县| 全州县|