Как я могу прочитать комментарии из файла Zip? - PullRequest
1 голос
/ 29 марта 2012

Как я могу читать и писать комментарии в Zip-файле, используя Java?

Я могу писать комментарии следующим образом:

FileOutputStream fos = new FileOutputStream(output);
ZipOutputStream zos = new ZipOutputStream(fos);
zos.setComment("BMC Comment");

Ответы [ 2 ]

5 голосов
/ 29 марта 2012

Попробуйте:

java.util.zip.ZipFile.getComment()

4 голосов
/ 29 марта 2012

Проверьте это сообщение:

Редактировать : к сожалению, исходная ссылка сейчас недоступна, вот ссылка на веб-архив:

http://web.archive.org/web/20100117212418/http://www.flattermann.net:80/2009/01/read-a-zip-file-comment-with-java/

Для потомков вот суть (слегка отформатированная):

private static String getZipCommentFromBuffer (byte[] buffer, int len) {
  byte[] magicDirEnd = {0x50, 0x4b, 0x05, 0x06};
  int buffLen = Math.min(buffer.length, len);

  // Check the buffer from the end
  for (int i = buffLen - magicDirEnd.length - 22; i >= 0; i--) {
    boolean isMagicStart = true;

    for (int k = 0; k < magicDirEnd.length; k++) {
      if (buffer[i + k] != magicDirEnd[k]) {
        isMagicStart = false;
        break;
      }
    }

    if (isMagicStart) {
      // Magic Start found!
      int commentLen = buffer[i + 20] + buffer[i + 21] * 256;
      int realLen = buffLen - i - 22;
      System.out.println ("ZIP comment found at buffer position " 
        + (i + 22) + " with len = " + commentLen + ", good!");

      if (commentLen != realLen) {
        System.out.println ("WARNING! ZIP comment size mismatch: "
          + "directory says len is " + commentLen
          + ", but file ends after " + realLen + " bytes!");
      }

      String comment = new String (buffer, i + 22, Math.min(commentLen, realLen));
      return comment;
    }
  }

  System.out.println ("ERROR! ZIP comment NOT found!");
  return null;
}
...