Archiver (16)

  • 32
  • Недоступна
Пришло время что-нибудь удалить из архива. Архив очень хитрая штука, нельзя вот так просто взять и удалить какой-то элемент внутри него. Почему? Представь, что мы решили сами придумать свой алгоритм сжатия текста. Посмотрев исходный текст, мы видим, что в нем часто встречается фраза "быть программис
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (119)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сонмониус Java Developer в Face IT
18 июля, 17:58
не понял зачем танцы с бубном когда добавляем в поток вывода ZipEntry (создаем новый по ссылке из ZipEntry взятого из входного потока, потом копируем данные через метод copy). Я просто сразу закидывал в ZipEntry из Input в Output, все работало, но валидатор не принимает. Если кто-то объяснит, в чем смысл делать именно так, как предложено в решении, буду благодарен.
Buenos
Уровень 44, Минск, Беларусь
18 июля, 06:22
Остались вопросы: (1) зачем мы добавляем лишний метод removeFile(), добавляем в нем только 1 path в синглтон лист, чтобы потом воспользоваться в следующем методе этим одним файлом? Почему сразу не внести один path в метод removeFiles()? Если бы мы сразу делали полноценный список или массив и просили пользователя внести один или несколько файлов, то понятно, а так зачем? (2) в эксекьюте мы спрашиваем из какого архива и какой файл будет удалить, а по факту пользователь должен внести path? Это рассинхрон вопроса к пользователю и реализации, или я чего-то недопонял?
Igor Petrashevsky
Уровень 47
3 июля, 23:47
так понимаю, это перепаковка по новой :facepalm: непонятно, чему мы учимся в этом задании. стримы - одни и те же 8 раз. мультредов - близко нет, а тема раздела - как раз мультитреды. лучше бы ftp или www сервер наколхозили, на манер чата. Там мультитрединг, сокеты парсинг стрингов.
bprint
Уровень 32
13 мая, 11:55
Теперь и WinRAR не нужен 😎!
The Body of the Atr
Уровень 51
28 апреля, 06:19
Всего эту задачу решили 5453 учеников. потом потестил решение от явараш, и оно просто выдает сообщение что файл удалён, но в архиве ничего не меняется.
Silendor
Уровень 29, Самара, Россия
3 февраля, 14:12
Не забываем вызывать closeEntry после каждого скопированного файла, иначе валидатор не примет. Закрывать entry нужно как для Input, так и для Output.
li.ch
Уровень 33, Нижний Новгород
20 мая, 18:17
Ничего не закрывала, валидатор всё принял
CyberBoar
Уровень 39, Russian Federation
29 июля, 10:22
Используйте try с ресурсами и проблем не знайте.
Дмитрий Сысоев
Уровень 31, Россия
6 ноября 2021, 21:05
Долго мучился с тем, что в итоговом архиве у меня лежит только временный файл .tmp Потом решил ради прикола сдать, иииии.... Валидатор принял со второй попытки. Единственное, что его не устраивало это проверка на существование исходного файла. У меня было вот так:
if (Files.notExists(zipFile)){
          throw  new WrongZipFileException();
      }
Путем недолгих размышлений решил заглянуть в написанный ранее метод extractAll, который за меня успешно на каком-то моменте решения задачи переписали. И оказалось, что проверка выглядит вот так:
if (!Files.isRegularFile(zipFile)) {
            throw new WrongZipFileException();
        }
Странно :)
Igor Petrashevsky
Уровень 47
3 июля, 23:42
технически, может быть папка archive.zip и ваш сниппет её не ловит.
Андрей Асеев Разработчик 1С(пока) в SCSG
11 октября 2021, 22:54
Так правильно
ZipFileManager zipFileManager = getZipFileManager();
Path fileToDelete = Paths.get(ConsoleHelper.readString());
Так не правильно
Path fileToDelete = Paths.get(ConsoleHelper.readString());
ZipFileManager zipFileManager = getZipFileManager();
🦊 𝕷𝖚𝖓𝖊𝕱𝖔𝖝
Уровень 41, Москва, Россия
Expert
19 октября 2021, 15:15
Немного не по теме, но лучше не называть эту переменную именем, которое больше подходит для метода (deleteFile = удалитьФайл), иначе в голове у читающего может возникнуть путаница. Лучше что-нибудь вроде fileToDelete (файлКоторыйНужноУдалить), или типа того.
Андрей Асеев Разработчик 1С(пока) в SCSG
25 октября 2021, 23:19
Да согласен, исправил
canny
Уровень 31, Россия
28 августа 2021, 08:02
Для тестов перегруженная функция класса ConsoleHelper, чтоб не вкалачивать постоянно пути файлов.
public static String readString(String defaultString) throws IOException {
    System.out.print("["+ defaultString +"] ");
    String s = readString();
    return s.isEmpty()? defaultString: s;
}
P.S. Только для тестов! Для валидатора нужен вызов без параметра.
Иван
Уровень 41, Москва
14 июля 2021, 13:10
Хорошая задача, позволяет посмотреть на ранее проделанную работу и освежить мозг