Предыстория
Сейчас пытаюсь получить zip-файл через HTTP-сервлет с HTTP-запросом. Полученный zip-файл содержит три разных файла. Эти файлы содержат информацию, которую я хочу отфильтровать, и делать это из источника не вариант (так оно и есть, хотя я знаю, что это было бы намного лучше).
Поскольку я не могу отфильтровать некоторую информацию в файле из источника, где файл создается с самого начала, мое решение состоит в том, чтобы распаковать файл, прочитать эти три файла как строки, а затем отфильтровать их. В конце «пересоберите» все как «zip-файл» (inputStream) и верните inputStream.
Проблема
В настоящее время я создал класс для обработки распаковки и фильтрации файла. В конце концов, я просто хочу вернуть новый inputStream, содержащий zip-файл и три файла внутри.
Я дошел до того, что получил контент из объекта HTTP в inputStream, распаковал этот inputStream и получил три файла в виде трех строк. Чтобы просто попытаться проверить, работает ли это, я в настоящее время не хочу делать больше, чем просто распаковывать их, просто закрывать inputStream и возвращать его. Однако это вызывает исключение, когда я возвращаю inputStream:
java.io.IOException: Attempted read on closed stream.
Это связано с тем, что inputStream используется вне функции, которую я представляю ниже. Когда я закрываю zipInputStream, я, вероятно, также закрываю inputStream для дальнейшей работы.
Текущий код
public InputStream convertInputStream(HttpEntity entity)
{
InputStream inputStream = null;
try
{
inputStream = entity.getContent();
}
catch (IOException e11)
{
}
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
Vector <String>entryVector = new Vector<String>();
ZipEntry entry;
try
{
String entryValue;
while((entry = zipInputStream.getNextEntry()) != null)
{
System.out.println("Unzipping file: " + entry.getName() + "...");
byte [] buf = new byte[(int) entry.getSize()];
zipInputStream.read(buf);
entryValue = new String(buf);
entryVector.add(entryValue);
zipInputStream.closeEntry();
}
}
catch(IOException e)
{
System.out.println("error in getting next entry.");
}
finally
{
try
{
zipInputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("Unzipping done!");
}
return inputStream;
}
Надеюсь, мне удастся выразить это максимально ясно. Я все еще вижу, что это очень сбивает с толку, когда я не могу показать все решение вне этой функции.