我的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
}
答案 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();
}