Я пытаюсь прочитать набор документов .xml, которые хранятся в каталоге .tgz на лету. Структура файла .tgz - это папка верхнего уровня 01 с подкаталогами A1, A2 и т. Д., И в каждом из этих каталогов Ax есть набор XML-документов, которые я хочу прочитать. например. 01 / A1 / 1234.xml
Пока что я могу разархивировать папку .tgz и открыть лежащую в ее основе папку верхнего уровня, но она считается пустой или не распознается как папка, если в ней должно быть несколько подкаталогов, в каждом из которых есть набор документов .xml.
if (filename.endsWith(".tgz")) {
TarArchiveInputStream tarInput = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(filename)));
TarArchiveEntry currentEntry = tarInput.getNextTarEntry();
for(File F : currentEntry.getFile().listFiles())
System.out.println(F.getName());
}
Когда этот блок выполняется, исключение пустого указателя генерируется при манипулировании папкой. Если я запускаю currentEntry.isDirectory()
, он возвращает истину. Если я вместо этого бегу:
if (filename.endsWith(".tgz")) {
TarArchiveInputStream tarInput = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(filename)));
TarArchiveEntry currentEntry = tarInput.getNextTarEntry();
System.out.println(currentEntry.getDirectoryEntries().length);
for(TarArchiveEntry F : currentEntry.getDirectoryEntries())
System.out.println(F.getName());
}
Строка System.out.println(currentEntry.getDirectoryEntries().length);
печатает 0, когда она должна быть 100. При использовании любого из методов для циклического перебора файлов в currentEntry ничего не найдено.
Можно ли читать файлы, которые должны находиться в этой папке .tgz, не распаковывая ее полностью, манипулируя файлами, а затем удаляя файлы вручную?