如何打开一个zip文件并遍历Android上的每个压缩文件?

时间:2014-03-01 02:32:56

标签: java android zip

我的res/raw目录中有一个zip文件。我想打开zip文件并遍历存储在其中的文本文件。我想要提取文件并将其写入设备;我只想打开zip文件,遍历每个文本文件中的行,然后关闭zip文件。

我在尝试读取zip文件时遇到问题,因为openRawResource方法返回InputStream。我尝试将流转换为ZipInputStream,但我对于下一步该做什么感到很遗憾。

在这种情况下如何创建ZipFile对象?

它并不多,但到目前为止我所拥有的是:

InputStream in = getResources().openRawResource(R.raw.primes);
ZipInputStream zin = new ZipInputStream(in);
ZipEntry entry;
while ((entry = zin.getNextEntry()) != null) {
  // TODO
}

3 个答案:

答案 0 :(得分:2)

您只需使用路径创建ZipFile,然后使用BufferedReader将每个条目放入ZipInputStream,如下所示:

    ZipFile zipFile = new ZipFile("file_path");
    Enumeration<? extends ZipEntry> entries = zipFile.entries();

    while(entries.hasMoreElements()) {
        ZipEntry zipEntry = entries.nextElement();
        System.out.println(zipEntry.getName());
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry)));
        String line;
        while((line = bufferedReader.readLine()) != null){
            System.out.println(line);
        }
        bufferedReader.close();
    }
    zipFile.close();
}

要以res / raw格式获取文件,您必须执行以下操作:

getResources().getIdentifier("myfile","raw", getPackageName()); //for res/raw/myfile.zip

答案 1 :(得分:1)

我发现了我需要的here。回答问题的人建议使用read中的ZipInputStream方法并将条目内容读入StringBuffer

答案 2 :(得分:0)

尝试这样的事情:

public static void unzip(File zipFile) throws IOException {

    byte[] buff = new byte[1024];
    ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile));
    ZipEntry ze;

    while ((ze = zis.getNextEntry()) != null) {
        if (!ze.isDirectory()) {                
            while (zin.read(buff) >= 0)
                // Do something with buff

        zis.closeEntry();
    }

    zis.close();
}