XmlStreamWriter в zip-файл
Мне нужно создать ZIP-файл, содержащий несколько файлов XML. В настоящее время я записываю XML-файлы на диск и оттуда вызываю действие, записывающее файлы в нужный zip-файл.
Для записи файлов XML я использую XmlStreamWriter с FileOutputStream.
xmlStreamWriter = factory.createXMLStreamWriter(new FileOutputStream(file, false), StandardCharsets.UTF_8.name());
Пока это работает, но теперь я хочу удалить часть, где контент записывается на диск. Вместо этого это должно быть записано непосредственно в файл почтового индекса.
Код на данный момент у меня есть:
public class ZipUtil {
public static void doFolderZip(final String sourceFolder, final String zipFile) throws Exception {
FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos);
addDirToZipArchive(zos, new File(sourceFolder), null);
zos.flush();
fos.flush();
zos.close();
fos.close();
}
public static void addDirToZipArchive(ZipOutputStream zos, File fileToZip, String parentDirectory) throws
Exception {
String zipEntryName = fileToZip.getName();
if (parentDirectory != null && !parentDirectory.isEmpty()) {
zipEntryName = parentDirectory + "/" + fileToZip.getName();
}
if (fileToZip.isDirectory()) {
for (File file : fileToZip.listFiles()) {
addDirToZipArchive(zos, file, zipEntryName);
}
} else {
byte[] buffer = new byte[1024];
FileInputStream fis = new FileInputStream(fileToZip);
zos.putNextEntry(new ZipEntry(zipEntryName));
int length;
while ((length = fis.read(buffer)) > 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
fis.close();
}
}
}
Я почему-то не могу понять, как добиться прямой записи в zip-файл из моего XmlStreamWriter.
Использование метода записи потокового писателя:
protected void writeElement(String attrName, final String value, final XMLStreamWriter xmlStreamWriter) throws
XMLStreamException {
xmlStreamWriter.writeStartElement("tag");
xmlStreamWriter.writeAttribute("name", attrName);
xmlStreamWriter.writeStartElement("value");
xmlStreamWriter.writeCharacters(value);
xmlStreamWriter.writeEndElement();
xmlStreamWriter.writeEndElement();
}
Любая помощь о том, как это сделать, приветствуется.