Как передать inputstream в архивированный файл, когда он считывается с помощью Java?

StackOverflow https://stackoverflow.com/questions/137645

  •  02-07-2019
  •  | 
  •  

Вопрос

Я хочу запустить программу и по мере ее запуска прочитать ее выходные данные и передать выходные данные в архивированный файл.Выходные данные программы могут быть довольно большими, поэтому идея состоит в том, чтобы не хранить слишком много в памяти - просто отправить их в zip-файл по мере их получения.

Это было полезно?

Решение

ZipOutputStream targetStream = new ZipOutputStream(fileToSaveTo);
ZipEntry entry = new ZipEntry(nameOfFileInZipFile);
targetStream.putNextEntry(entry);

byte[] dataBlock = new byte[1024];
int count = inputStream.read(dataBlock, 0, 1024);
while (count != -1) {
    targetStream.write(dataBlock, 0, count);
    count = inputStream.read(dataBlock, 0, 1024);
}

Другими словами:

  1. Вы создаете ZipOutputStream, предоставляя ему файл, в который вы хотите выполнить запись.
  2. Вы создаете ZipEntry, который представляет собой файл внутри этого zip-файла.т. е.Когда вы открываете myFile.zip, и там есть 3 файла, каждый файл является ZipEntry.

  3. Вы помещаете этот ZipEntry в свой ZipOutputStream

  4. Создайте байтовый буфер для считывания ваших данных.
  5. Считайте из вашего InputStream в ваш байтовый буфер и запомните количество.
  6. Пока значение count не равно -1, запишите этот байт byffer в ваш zipStream.
  7. Прочтите следующую строчку.

Закройте свои потоки, когда закончите.Оберните это в метод, который вы считаете нужным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top