Не удалось получить список файлов в файле .tar в Java - PullRequest
2 голосов
/ 11 марта 2020

Я пытаюсь вернуть список имен файлов внутри tar-файла. Я использую приведенный ниже код, но когда он достигает l oop, он сразу переходит к исключению catch и говорит: "java .io.IOException: обнаружена ошибка при разборе заголовка

ниже это код, который я использую. Можете ли вы помочь мне понять, почему это не работает?

public List<String> getFilesInTar(String filename) {
  List<String> foundFiles = Lists.newArrayList();
  String filePath = System.getProperty("user.home") + File.separator + "Downloads" + File.separator + filename;
  try {
      TarArchiveInputStream tarInput = new TarArchiveInputStream(new FileInputStream(filePath));
      TarArchiveEntry entry;
      while ((entry = tarInput.getNextTarEntry()) != null) {
          if (!entry.isDirectory()) {
              foundFiles.add(entry.getName());
          }
      }
      tarInput.close();
  } catch (IOException ex) {
      log.error(ex.getMessage());
  }
  return foundFiles;
}

1 Ответ

0 голосов
/ 11 марта 2020

Ваш файл не является файлом tar. Это сжатый архив tar-файла.

Вы не можете открыть его как tar-файл, как есть, по той же причине, по которой вы не можете прочитать текстовый файл, пока он находится в zip-архиве: байты, представляющие сжатый сами данные не читаются.

Расширение .gz вашего имени файла указывает, что оно было сжато с помощью gzip, что обычно при сжатии файлов tar. Вы можете использовать класс GZIPInputStream , чтобы распаковать его:

  TarArchiveInputStream tarInput = new TarArchiveInputStream(
        new GZIPInputStream(
            new BufferedInputStream(
                new FileInputStream(filePath))));
...