Я сейчас пытаюсь это кодировать. Я выполнил базовую c обработку, чтобы переименовать содержимое файлов в заархивированном файле.
String archiveDate = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd"));
File archivingDir = new File(CommClientConstants.SFMC_ARCHIVE_DIR + archiveDate + "/");
OutputStream os = new BufferedOutputStream(new FileOutputStream(archivingDir + "/" + fileName.split("\\.")[0]+".tar"));
try (ArchiveOutputStream aos = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, os)) {
for (String zippedFile : new ArrayList<>(renamedNonManifestFiles.keySet())) {
File archiveFile = new File(zippedFile);
ArchiveEntry entry = aos.createArchiveEntry(archiveFile, archiveFile.getName());
aos.putArchiveEntry(entry);
try (InputStream i = new ByteArrayInputStream(renamedNonManifestFiles.get(zippedFile).getBytes())){
IOUtils.copy(i, aos);
}
catch (IOException ioe){
//System.out.println("SIZE IS: " + entry.getSize());
ioe.printStackTrace();
}
}
aos.closeArchiveEntry();
aos.finish();
}
Это в настоящее время меняет имя, которое я хочу, но записывает только сжатый файл как файл .zip.
Я попытался изменить ArchiveOutputStream aos = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, os)
на ArchiveOutputStream aos = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.TAR, os)
, и я попытался изменить OutputStream os = new BufferedOutputStream(new FileOutputStream(archivingDir + "/" + fileName.split("\\.")[0]+".tar"));
на TarArchiveOutputStream os = new TarArchiveOutputStream(new FileOutputStream(archivingDir + "/" + fileName.split("\\.")[0]+".tar"));
, но эти изменения приводят только к исключениям, связанным с tar, когда компилятор жалуется на «размер заголовка '0' или отсутствие тока Запись tar.
Я знаю, что кое-что не понимаю. Нужно ли мне полностью распаковать .zip и записать его на диск, а затем каким-то образом преобразовать его в файл tar? Я бы хотел выполнять все эти операции в потоках и писать на диск как можно меньше, только когда я буду готов сжать архив и записать его.
Как я могу это сделать? Любое понимание приветствуется