Вместо того, чтобы закрывать поток только при добавлении чего-либо, я выполнил проверку состояния, чтобы увидеть, есть ли что-нибудь, что нужно сжать, перед запуском почтового индекса. Это помогло мне упростить процесс, и я думаю, что в целом его можно использовать для решения проблемы «ZIP-файл должен иметь хотя бы одну запись». Правда, закрытие zos
может вызвать другие исключения, но это редко.
Я думаю, что это проблема с Java, которая не обрабатывает случай, когда нет файлов для архивирования.
т.е:
int itemsToAdd=0;
//....
if ( itemsToAdd > 0 ) {
ZipOutputStream zos = new ZipOutputStream(file);
try {
//add files to zip
}
finally {
zos.close();
}
}