Фон
В настоящее время я пытаюсь получить zip-файл через HTTP-сервлет с HTTP-запросом. Полученный zip-файл содержит три разных файла. Эти файлы содержат информацию, которую я хочу отфильтровать, и делать это из источника нельзя (это просто так, хотя я знаю, что было бы намного лучше).
Поскольку я не могу отфильтровать некоторую информацию в файле из источника, где файл создается с самого начала, мое решение состоит в том, чтобы распаковать файл, прочитать эти три файла как строки и затем отфильтровать их. В конце «перестроить» все как «zipfile» (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;
}
Надеюсь, мне удастся выразить это максимально ясно. Я до сих пор вижу, что очень сложно понять, когда я не могу показать полное решение вне этой функции.