美文网首页
Android assets内压缩文件解压,解压到缓存示例

Android assets内压缩文件解压,解压到缓存示例

作者: wenju | 来源:发表于2021-03-31 09:45 被阅读0次

    1.assets内压缩文件解压AssetsZipUtils,包含一个获取文件夹下所有文件路径的方法,方便获取文件使用

    public class AssetsZipUtils {
        public static final String TAG = "ZIP";
        /**
         * 解压assets目录下的zip到指定的路径
         * @param zipFileString ZIP的名称,压缩包的名称:xxx.zip
         * @param outPathString 要解压缩路径
         * @throws Exception
         */
        public static void UnZipAssetsFolder(Context context, String zipFileString, String
                outPathString) throws Exception {
            Log.d("文件路径", context.getAssets().open(zipFileString).toString());
            ZipInputStream inPutZip = new ZipInputStream(context.getAssets().open(zipFileString));
            ZipEntry zipEntry;
            String szName = "";
            while ((zipEntry = inPutZip.getNextEntry()) != null) {
                Log.d("判断文件是否存在",zipEntry.isDirectory()+"");
                szName = zipEntry.getName();
                if (zipEntry.isDirectory()) {
                    szName = szName.substring(0, szName.length() - 1);
                    File folder = new File(outPathString + File.separator + szName);
                    //目前判断条件,如果包含解压过的文件就不再解压
                    if(!folder.exists()){
                        folder.mkdirs();
                    }else{
                        return;
                    }
                } else {
                    Log.e(TAG, outPathString + File.separator + szName);
                    File file = new File(outPathString + File.separator + szName);
                    if (!file.exists()) {
                        Log.e(TAG, "Create the file:" + outPathString + File.separator + szName);
                        file.getParentFile().mkdirs();
                        file.createNewFile();
                    }
                    // 获取文件的输出流
                    FileOutputStream out = new FileOutputStream(file);
                    int len;
                    byte[] buffer = new byte[1024];
                    // 读取(字节)字节到缓冲区
                    while ((len = inPutZip.read(buffer)) != -1) {
                        // 从缓冲区(0)位置写入(字节)字节
                        out.write(buffer, 0, len);
                        out.flush();
                    }
                    out.close();
                }
            }
            inPutZip.close();
        }
    
    
        public static List<String> getFilesAllName(String path) {
            File file=new File(path);
            File[] files=file.listFiles();
            if (files == null){
                Log.e("error","空目录");
                return null;
            }
            List<String> s = new ArrayList<>();
            for(int i =0;i<files.length;i++){
                s.add(files[i].getAbsolutePath());
            }
            return s;
        }
    }
    

    2.使用示例,将assets中的压缩文件解压到App缓存,并获取使用

    //文件解压
    try{
          AssetsZipUtils.UnZipAssetsFolder(getApplicationContext(),"fonts.zip",getExternalCacheDir().toString());
    }catch (Exception e) {
           e.printStackTrace();
    }
    //获取解压文件加下所有文件路径
    List<String> filesAllName = AssetsZipUtils.getFilesAllName(getExternalCacheDir().toString() + File.separator + "fonts");
    
    

    相关文章

      网友评论

          本文标题:Android assets内压缩文件解压,解压到缓存示例

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