用于从压缩文本文件中获取文本行的阅读器

时间:2013-10-08 10:49:24

标签: java android zip inputstream bufferedreader

摘要:拥有包含a.zip的{​​{1}}的字节图像,如何才能获得一个干净且正确的读取器返回文本文件?

我会将一个zip文件的图像从Web服务下载到a.txt。我想写一个像

这样的方法
byte[] content

会返回一个可以像

一样使用的阅读器
private BufferedReader contentToBufferedReader(byte[] content)

到目前为止,我已经(更新了

reader = contentToBufferedReader(content);
while ((line = reader.readLine()) != null) {
    processThe(line);
}
reader.close()

我不确定当出现故障时如何关闭所有流对象。此外,如果private BufferedReader contentToBufferedReader(byte[] content) { ByteArrayInputStream bais = new ByteArrayInputStream(content); ZipInputStream zipStream = new ZipInputStream(bais); BufferedReader reader = null; try { ZipEntry entry = zipStream.getNextEntry(); // I need only the first (and the only) entry from the zip file. if (entry != null) { reader = new BufferedReader(new InputStreamReader(zipStream, "UTF-8")); System.out.println("contentToBufferedReader(): success"); } } catch (IOException e) { System.out.println("contentToBufferedReader(): failed..."); System.out.println(e.getMessage()); } return reader; } 成功返回,使用和关闭,我不确定如何关闭它们。

2 个答案:

答案 0 :(得分:1)

检查此主题,您可能需要先解压缩文件,然后才能阅读。

What is a good Java library to zip/unzip files?

答案 1 :(得分:1)

这将一次性取出所有字节(为方便起见,使用guava ByteStreams)

ZipEntry entry = zipStream.getNextEntry();
while (entry != null) {
  if (!entry.isDirectory()) {
    String filename = entry.getName();//this includes the path!
    byte[] data = ByteStreams.toByteArray(zipStream);
    //do something with the bytes 
  }
  entry = zipIn.getNextEntry();
}

你可以得到这样的读者:

InputStreamReader reader = new InputStreamReader(new ByteArrayInputStream(data)));

当您调用zipStream.getNextEntry()时,zipStream会前进。我还认为流不支持标记和重置iirc,这意味着你只能读取一次(因此在将其传递给可能需要随机访问的其他处理之前立即将其全部取出)