Как преобразовать 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());