美文网首页Android技术知识Android开发Android知识
Android 将assets中的文件复制到外置sdcard卡

Android 将assets中的文件复制到外置sdcard卡

作者: CoderMiner | 来源:发表于2016-11-08 15:10 被阅读0次

Android 将assets中的文件复制到外置sdcard卡

assets文件夹中的文件的访问是通过

InputStream inputStream = context.getAssets().open("FileName");

列出assets中某个目录下的所有的文件及文件夹

String[] srcFiles = context.getAssets().list("assetsPath");

assets/folder/文件夹中所有的文件

String[] srcFiles = context.getAssets().list("folder");

将assets中某个文件夹的文件复制到外置sdcard中

核心代码如下:

package com.android.example.assets;
import android.content.Context;
import android.util.Log;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class Utils{
    public static void doCopy(Context context, String assetsPath, String desPath) throws IOException {
        String[] srcFiles = context.getAssets().list(assetsPath);//for directory
        for (String srcFileName : srcFiles) {
            String outFileName = desPath + File.separator + srcFileName;
            String inFileName = assetsPath + File.separator + srcFileName;
            if (assetsPath.equals("")) {// for first time
                inFileName = srcFileName;
            }
            Log.e("tag","========= assets: "+ assetsPath+"  filename: "+srcFileName +" infile: "+inFileName+" outFile: "+outFileName);
            try {
                InputStream inputStream = context.getAssets().open(inFileName);
                copyAndClose(inputStream, new FileOutputStream(outFileName));
            } catch (IOException e) {//if directory fails exception
                e.printStackTrace();
                new File(outFileName).mkdir();
                doCopy(context,inFileName, outFileName);
            }
        }
    }

    private static void closeQuietly(OutputStream out){
        try{
            if(out != null) out.close();;
        }catch (IOException ex){
            ex.printStackTrace();
        }
    }

    private static void closeQuietly(InputStream is){
        try{
            if(is != null){
                is.close();
            }
        }catch (IOException ex){
            ex.printStackTrace();
        }
    }

    private static void copyAndClose(InputStream is, OutputStream out) throws IOException{
        copy(is,out);
        closeQuietly(is);
        closeQuietly(out);
    }

    private static void copy(InputStream is, OutputStream out) throws IOException{
        byte[] buffer = new byte[1024];
        int n = 0;
        while(-1 != (n = is.read(buffer))){
            out.write(buffer,0,n);
        }
    }
}

工程源码

相关文章

网友评论

    本文标题:Android 将assets中的文件复制到外置sdcard卡

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