温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android如何实现复制Assets文件到SD卡

发布时间:2021-04-16 11:46:20 来源:亿速云 阅读:906 作者:小新 栏目:移动开发

这篇文章主要介绍Android如何实现复制Assets文件到SD卡,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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”

以上是“Android如何实现复制Assets文件到SD卡”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI