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

2021-03-31  本文已影响0人  wenju

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");

上一篇下一篇

猜你喜欢

热点阅读