美文网首页
复制Assets 下文件到SD 卡

复制Assets 下文件到SD 卡

作者: FZB | 来源:发表于2019-10-12 09:59 被阅读0次

方法1

代码块
public void start(){  //开始copy文件到sd卡
AssetManager mAm = context.getAssets();//初始化资产目录管理器
    getFileCopy(mAm.open(assetsfilename),sdfilename);
}
  //拷贝过程
    private void getFileCopy(InputStream is,String mUrl) {
        File file = new File(mUrl);

        InputStreamReader isr = null;
        BufferedReader br = null;
        isr = new InputStreamReader(is);
        br = new BufferedReader(isr);

        FileOutputStream fos = null;
        OutputStreamWriter osw = null;
        BufferedWriter bw = null;

        try {
            if(!file.exists()){
                file.createNewFile();
            }
            fos = new FileOutputStream(file);
            osw = new OutputStreamWriter(fos);
            bw = new BufferedWriter(osw);

            String ss;
            String ioInfo = "";
            while ((ss=br.readLine())!=null){
                ioInfo+=ss;
            }
            bw.write(ioInfo);
        } catch (IOException e) {
            e.printStackTrace();
            LogUtils.e("hhjhgjsa:"+e.getMessage());
        }finally {
            try {
                if(bw!=null){
                    bw.close();
                }
                if(osw!=null){
                    osw.close();
                }

                if(fos!=null){
                    fos.close();
                }

                if(br!=null){
                    br.close();
                }

                if(isr!=null){
                    isr.close();
                }
                if (is!=null){
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

方法2

public void start (){
            getAssetsFileCopy(item.getAssetsfile(),item.getLocalfileurl());
}

    private void getAssetsFileCopy(String assetsName, String mUrl) {
        InputStream  is=   context.getClassLoader().getResourceAsStream("assets/"+assetsName);
        File file = new File(mUrl);
        FileOutputStream fos = null;

        try {
            if(!file.exists()){
                file.createNewFile();
            }
            fos = new FileOutputStream(file);

            byte[] buffer = new byte[1024];
            int n = 0;
            while ((n= is.read(buffer))!=-1){
                fos.write(buffer,0,n);
            }
        } catch (IOException e) {
            e.printStackTrace();
            LogUtils.e("hhjhgjsa:"+e.getMessage());
        }finally {
            try {

                if(fos!=null){
                    fos.close();
                }
                if (is!=null){
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

改方法主要适用于大文件的copy

方法一适用于小文件,少量文件的复制,但是大文件和批量文件复制会导致OOM,因为是一次性读取

相关文章

网友评论

      本文标题:复制Assets 下文件到SD 卡

      本文链接:https://www.haomeiwen.com/subject/gvflyctx.html