14

このようにzipファイルからzipエントリを取得しました。

InputStream input = params[0];
ZipInputStream zis = new ZipInputStream(input);

ZipEntry entry;
try {
    while ((entry = zis.getNextEntry())!= null) {

    }
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

これZipEntryは問題なく動作し、問題はありません。

私の質問

ZipEntriesこれらはxmlファイルとcsvファイルであるため、これらのコンテンツを文字列にするにはどうすればよいですか。

4

5 に答える 5

13

あなたはから読む必要がありますZipInputStream

StringBuilder s = new StringBuilder();
byte[] buffer = new byte[1024];
int read = 0;
ZipEntry entry;
while ((entry = zis.getNextEntry())!= null) {
      while ((read = zis.read(buffer, 0, 1024)) >= 0) {
           s.append(new String(buffer, 0, read));
      }
}

内部を終了したらwhile、コンテンツを保存してStringBuilderリセットします。

于 2012-11-09T16:27:35.383 に答える
4

Unicode 文字を壊さないアプローチは次のとおりです。

final ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(content));
final InputStreamReader isr = new InputStreamReader(zis);
final StringBuilder sb = new StringBuilder();
final char[] buffer = new char[1024];

while (isr.read(buffer, 0, buffer.length) != -1) {
    sb.append(new String(buffer));
}

System.out.println(sb.toString());
于 2016-03-30T13:46:17.067 に答える
0

Kotlin版だがJavaでも使える

val zipInputStream = ZipInputStream(inStream)
var zipEntry = zipInputStream.nextEntry
while(zipEntry != null) {
    println("Name of file : " + zipEntry.name)
    val fileContent = String(zipInputStream.readAllBytes(), StandardCharsets.UTF_8)
    println("File content : $fileContent")
    zipEntry = zipInputStream.nextEntry
}
于 2021-12-09T04:52:13.547 に答える