Код у меня был примерно, как у всех, при тестах писало ошибку. Попробовал заменить свой код на чужой, то же самое - ошибка.
Дай, думаю, попробую валидировать. Прошло с первого раза. Может я зря три часа мучался? )
public void removeFiles(List<Path> pathList) throws Exception {
if (!Files.isRegularFile(zipFile)) {
throw new WrongZipFileException();
}
Path tmp = Files.createTempFile("tmp", ".zip");
/* Мой глюкокод
try (ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(zipFile));
ZipOutputStream outputStream = new ZipOutputStream (Files.newOutputStream(tmp))) {
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
if (pathList.contains(Paths.get(zipEntry.getName()))) {
ConsoleHelper.writeMessage("Файл " + zipEntry.getName() + " удалён.");
} else {
outputStream.putNextEntry(new ZipEntry(zipEntry.getName()));
copyData(zipInputStream, outputStream);
outputStream.closeEntry();
//copyData(zipInputStream, outputStream);
//System.out.println("Файл " + zipEntry.getName() + " оставлиен.");
}
zipEntry = zipInputStream.getNextEntry();
}
}*/
// Рабочий код
try (ZipOutputStream zipOutputStream = new ZipOutputStream(Files.newOutputStream(tmp));
ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(zipFile))) {
ZipEntry zipEntry = zipInputStream.getNextEntry();
while (zipEntry != null) {
if (pathList.contains(Paths.get(zipEntry.getName()))) {
ConsoleHelper.writeMessage(zipEntry.getName().concat(" был удален"));
} else {
zipOutputStream.putNextEntry(new ZipEntry(zipEntry.getName()));
copyData(zipInputStream, zipOutputStream);
zipOutputStream.closeEntry();
}
zipInputStream.closeEntry();
zipEntry = zipInputStream.getNextEntry();
}
Files.move(tmp, zipFile, StandardCopyOption.REPLACE_EXISTING);
}
}