Archiver (10)

  • 14
  • Недоступна
Пришло время отрефакторить класс ZipFileManager. В методе createZip есть код, который нам также понадобится в методах, которые будут добавлять или удалять файл в архив, распаковывать его и т.д. Эти методы мы будем реализовывать позже, но уже сейчас можем вынести общие части кода в отдельные методы.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (76)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Даниил29 уровень
11 мая, 13:18
Огромный совет для тех кто не уверен что понял зачем и для чего нужно было то или иное действие, то просто вникните в написанный код после сдачи валидатору и попробуйте как можно лучше разобраться как что работает, ну или хотя бы внятно запомнить сам код. Ну или на крайняк где-то его сохранить. Когда откроете новое задание ваш код перепишеться и там будет слегка по другому скорее всего, плюс - добавят комменты. Это всё даст возможность найти ответы хотя бы на часть вопросов.
Даниил29 уровень
11 мая, 12:56
Капец задача не далась... Ругался валидатор по пунктам 2,3,5,6 из-за того что я сам не догадался что в методе addNewZipEntry(ZipOutputStream zipOutputStream, Path filePath, Path fileName) создавая InputStream нужно вызвать вот этот метод передавая в него именно такой параметр
Files.newInputStream(filePath.resolve(fileName));
//сначала я просто делал так как ниже
Files.newInputStream(fileName);
но мне было не понятно нафига нужен был вообще параметр filePath так как он нигде не использовался. Потом ковыряясь тут комментах понял что не так. Вызывая метод addNewZipEntry мы передавали в него путь корневой папки (source.getParent()) и относительный путь файла (source.getFileName()), а для создания InputStream нужно было указывать абсолютный путь который нам и возвращал вызов метода
filePath.resolve(fileName);
Зачем нужно было делать метод addNewZipEntry с 3-мя параметрами, а не с 2-мя (вторым бы был сразу путь который передаётся в метод createZip(Path source) вместо двух раздельных путей которые являються частью одного) мне не понятно. P.S. Ещё из комментов тут вычитал и добавил в конце блока try-with-resources метода addNewZipEntry строку
zipOutputStream.closeEntry();
Без неё не пробовал сдать валидатору когда уже исправил другие ошибки, но у меня все вызовы метода addNewZipEntry были внутри блока try-with-resources в методе createZip так что не догадываюсь о настоящей целесообразности выше указанной строчки кода.
Dima30 уровень
1 мая, 02:27
18 попыток из-за addNewZipEntry: было: zipOutputStream.close(); нужно было: zipOutputStream.closeEntry();
Sasha Dmitrieva30 уровень, Москва
15 апреля, 19:48
Валик не пропускал, пока "zipFile.getParent().toFile().mkdirs()" не был заменен на "Files.createDirectories(zipFile.getParent())"
Дмитрий К.33 уровень, Иркутск
27 февраля, 08:11
задачка вынос мозга валидатору ... 13 попыток так делать не надо
try(InputStream in = Files.newInputStream(Paths.get(filePath.toString()+"\\"+fileName.toString())))
а так надо
try(InputStream in = Files.newInputStream(filePath.resolve(fileName)))
Сергей35 уровень
14 февраля, 16:33
Знал бы про Files.createDirectories() не пришлось бы метод на рекурсивное создание всех отсутствующих директорий писать, так только время зря потратил(
Дмитрий К.33 уровень, Иркутск
27 февраля, 07:10
первый урок курса Collectios рассказывает нам что есть Files.createDirectories() =) https://javarush.ru/quests/lectures/questcollections.level01.lecture03
Vitaly Khan37 уровень
11 января, 11:48
как и у многих других, у меня не проходил последний пункт. в комментариях нашел несколько возможных причин, ни одна не оказалась моим случаем. у меня причиной было то, что я вначале открывал поток ZipOutputStream, а потом уже совершал внутри все операции, включая проверку на наличие директории. а надо это проверку делать до. очень долго ошибку искал(((
Ольга29 уровень, Санкт-Петербург
8 февраля, 18:29
Спасибо! Та же ерунда! Уже и не знала, что не так делаю)
Эльвира30 уровень, Санкт-Петербург
4 января, 19:50
Куча попыток из-за того, что до этого прошло: ZipEntry entry = new ZipEntry(fileName.getFileName().toString()); а правильно: ZipEntry entry = new ZipEntry(fileName.toString());
Oleg Martynov30 уровень, Санкт-Петербург
2 марта, 23:47
Спасибо, вы сэкономили мне кучу нервов :)
Володимир Штаба31 уровень, Киев
29 ноября 2018, 02:29
Адски тяжелое условие в плане чтения и понимая чего от тебя хотят , и в такой кучу очень тяжело не напартачить так что с 3 попытки только . Я прокололся на вызове элементов из списка который мы получаем из файл менеджера , там соурс передвать нужно в первозданном виде
pr1zrak35 уровень
21 ноября 2018, 05:29
Объясните пожалуйста, кто-нибудь как это все работает. Привожу пример. на диске C: создал папку test, внутри папки ничего нет. Сделал тестовый класс, в методе майн с консоли считываю путь в переменную path1. 1. Ввожу "c:\test\test2" Такой директории у меня нет, есть только c:\test Создаю файл File file = path1.toFile(); file.exists() выводит фолс, ок, понятно, логично. Но не понятно, что мне сейчас создавать, директорию или файл? Как мне это узнать? file.isDirectory выводит false, file.isFile выводит false. Помогите разобраться. Как мне понять, что мне создать, директорию или файл, если я ввел не существующую директорию.