Как преобразовать ArchiveEntry в InputStream?

Я читаю tar.gz архив с использованием

ArchiveEntry entry = tarArchiveInputStream.getNextEntry();

Вопрос: как я могу преобразовать этот ArchiveEntry в InputStream так что я могу на самом деле читать и обрабатывать файл в String?

3 ответа

Решение

Вы можете использовать IOUtils для полного чтения InputStream:

import org.apache.commons.compress.utils.IOUtils

byte[] buf = new byte[(int) entry.getSize()];
int readed  = IOUtils.readFully(tarArchiveInputStream,buf);

//readed should equal buffer size
if(readed != buf.length) {
 throw new RuntimeException("Read bytes count and entry size differ");
}

String string = new String(buf, StandardCharsets.UTF_8);

Если ваш файл в кодировке, отличной от utf-8, используйте его вместо utf-8 в конструкторе строки.

Это уже InputStream,

byte[] buf = new byte[(int) entry.getSize()];
int k = tarArchiveInputStream.read(buf, 0, buf.length);
String s = new String(buf, 0, k);

Если вы действительно хотите прочитать файл один за другим, TarEntry фактически содержит объект File:

Этот класс представляет запись в архиве Tar. Он состоит из заголовка записи, а также файла записи.

Таким образом, достаточно просто инициализировать другой FileInputStream:

import org.apache.commons.io.IOUtils;
String file = IOUtils.toString(new FileInputStream(entry.getFile());
Другие вопросы по тегам