после того, как валидатор принял решение, попробовал протестить, как же все-таки работает код
и тут я заметил, что папка внутри архива создается, но новый файл не создается, то есть папка пустая - 0 байт
два файла, которые были изначально в архиве так же и остаются
public class Solution {
public static void main(String[] args) throws IOException {
Path file = Paths.get(args[0]);
Map<String, ByteArrayOutputStream> filesInArchive = new HashMap<>();
try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(args[1])))
{
ZipEntry entry;
while((entry = zipInputStream.getNextEntry()) != null){
ByteArrayOutputStream arrayOutput = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int readBytes = 0;
while ((readBytes = zipInputStream.read(buffer)) > 0){
arrayOutput.write(buffer, 0, readBytes);
}
filesInArchive.put(entry.getName(), arrayOutput);
}
}
try (ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(args[1])))
{
String folderName = "new";
zipOutputStream.putNextEntry(new ZipEntry(folderName + "/"));
Files.copy(file, zipOutputStream);
for (Map.Entry<String, ByteArrayOutputStream> pair : filesInArchive.entrySet()) {
zipOutputStream.putNextEntry(new ZipEntry(pair.getKey()));
pair.getValue().writeTo(zipOutputStream);
}
}
}
}
подскажите, пожалуйста, в чем причина?
поизучал разные решения и во всех добавление файлов выполняются двумя строками или одной
Path file = Paths.get(args[0]);
Files.copy(file, zipOutputStream);
//или
Files.copy(Paths.get(args[0]), zipOutputStream);
в "правильном решении" через File с последующим преобразованием в path, но это сути ведь не меняет
кстати, правильное решение работает как нужно - файл даже открывается
и такой еще нюансик, оказывается если неправильно написать код и вылетит исключение, то файл, который хотим добавить в архив (добавлял картинку), портится - он не удаляется, но не открывается, написано "исходный файл не найден", при этом он весит как и раньше. очень интересно