美文网首页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