为了账号安全,请及时绑定邮箱和手机立即绑定

如何从内部存储中提取 zip 文件?

如何从内部存储中提取 zip 文件?

有只小跳蛙 2021-12-22 19:10:30
我想做一个项目来下载文件和提取文件。我尝试修复它很长时间。请查看我的代码并帮助我,或者有人告诉我如何下载文件和解压 zip 文件。在文件“download.zip”中包含 5 个视频文件。我使用Sreedev R 的Class Decompresspublic class MainActivity extends AppCompatActivity {private static String dirPath, dirPath2;final String URL1 = "http://webmaster.com/01/defualt.zip";@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    dirPath = Utils.getRootDirPath(getApplicationContext());    dirPath2 = Utils.getRootDirPath(getApplicationContext())+"Unzip";    init();    onClickListenerOne();    Decompress unzip = new Decompress(dirPath+"/download.zip",dirPath2);    unzip.unzip();}解压类public class Decompress {    private String zip;    private String loc;    public Decompress(String zipFile, String location) {        zip = zipFile;        loc = location;        dirChecker("");    }    public void unzip() {        try  {            FileInputStream fin = new FileInputStream(zip);            ZipInputStream zin = new ZipInputStream(fin);            ZipEntry ze = null;            while ((ze = zin.getNextEntry()) != null) {                Log.v("Decompress", "Unzipping " + ze.getName());                if(ze.isDirectory()) {                    dirChecker(ze.getName());                } else {                    FileOutputStream fout = new FileOutputStream(loc + ze.getName());                    for (int c = zin.read(); c != -1; c = zin.read()) {                        fout.write(c);                    }                    zin.closeEntry();                    fout.close();                }            }            zin.close();        } catch(Exception e) {            Log.e("Decompress", "unzip", e);        }    }    private void dirChecker(String dir) {        File f = new File(loc + dir);        if(!f.isDirectory()) {            f.mkdirs();        }    }}
查看完整描述

1 回答

?
森林海

TA贡献2011条经验 获得超2个赞

解决方案


您可以使用zip4j来提取 ZIP 文件。


public class Decompress {

    private String zip;

    private String loc;


    public Decompress(String zipFile, String location) {

        zip = zipFile;

        loc = location;


        dirChecker();

    }


    private void dirChecker() {

        File f = new File(loc);


        if(!f.isDirectory()) {

            f.mkdirs();

        }

    }


    public void unzip() {

        try {

            ZipFile zipFile = new ZipFile(zip);

            List<FileHeader> fileHeaders = zipFile.getFileHeaders();

            for (FileHeader fileHeader : fileHeaders) {

                String fileName = fileHeader.getFileName();


                if (fileName.contains("\\")) {

                    fileName = fileName.replace("\\", "\\\\");

                    String[] Folders = fileName.split("\\\\");

                    StringBuilder newFilepath = new StringBuilder();

                    newFilepath.append(loc);

                    for (int i = 0; i < Folders.length - 1; i++) {

                        newFilepath.append(File.separator);

                        newFilepath.append(Folders[i]);

                    }

                    zipFile.extractFile(fileHeader, newFilepath.toString(), null, Folders[Folders.length - 1]);

                } else {

                    zipFile.extractFile(fileHeader, loc);

                }

            }


        } catch (Exception e) {

            e.printStackTrace();

        }

    }

}


查看完整回答
反对 回复 2021-12-22
  • 1 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信