JavaRush
Акция
Университет
Java FullStack
Python FullStack
AI Native Developer
new
Web FullStack
Обучение
Курсы
Задачи
Опросы
Игры
Помощь
График пинков
Стажировка
Сообщество
Пользователи
Форум
Чат
Статьи
Истории успеха
Активности
Отзывы
Подписки
Светлая тема
Вопрос
  • Отзывы
  • О нас
  • CS50
Начать
Начать обучение
Начать обучение
  • Все вопросы
JavaRush/Помощь по Java задачам/Подскажите что не так
Алексей Коваленко
41 уровень
  • 19.01.2019
  • 578просмотров
  • 0комментариев

Подскажите что не так

Вопрос по задаче Добавление файла в архив
Java Collections,  1 уровень,  6 лекция
Новый


В метод main приходит список аргументов.
Первый аргумент - полный путь к файлу fileName.
Второй аргумент - путь к zip-архиву.
Добавить файл (fileName) внутрь архива в директорию 'new'.
Если в архиве есть файл с таким именем, то заменить его.

Пример входных данных:
C:/result.mp3
C:/pathToTest/test.zip

Файлы внутри test.zip:
a.txt
b.txt

После запуска Solution.main архив test.zip должен иметь такое содержимое:
new/result.mp3
a.txt
b.txt

Подсказка: нужно сначала куда-то сохранить содержимое всех энтри, а потом записать в архив все энтри вместе с добавленным файлом.
Пользоваться файловой системой нельзя.

Требования:
  • В методе main создай ZipInputStream для архивного файла (второй аргумент main). Нужно вычитать из него все содержимое.
  • В методе main создай ZipOutputStream для архивного файла (второй аргумент main).
  • В ZipOutputStream нужно записать содержимое файла, который приходит первым аргументом в main.
  • В ZipOutputStream нужно записать все остальное содержимое, которое было вычитано из ZipInputStream.
  • Потоки для работы с архивом должны быть закрыты.
package com.javarush.task.task31.task3105; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; /* Добавление файла в архив */ public class Solution { public static void main(String[] args) throws IOException { Path file = Paths.get(args[0]); try (ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(args[1])); ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream(args[1]))){ Map<String,byte[]> map = new HashMap<>(); while (zipInputStream.available() > 0){ ZipEntry entry = zipInputStream.getNextEntry(); byte[] buff = new byte[2048]; zipInputStream.read(buff); map.put(entry.getName(),buff); zipInputStream.closeEntry(); } int count = 0; for(Map.Entry<String,byte[]> pair : map.entrySet()){ zipOutputStream.putNextEntry(new ZipEntry(pair.getKey())); if(pair.getKey().equals(file.getFileName().toString())){ Files.copy(file,zipOutputStream); count++; }else{ zipOutputStream.write(pair.getValue()); } zipOutputStream.closeEntry(); } zipOutputStream.putNextEntry(new ZipEntry("new/" + file.getFileName().toString())); Files.copy(file,zipOutputStream); zipOutputStream.closeEntry(); } } }
0
Комментарии
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
У этой страницы еще нет ни одного комментария
Обучение
  • Курсы программирования
  • Регистрация
  • Курс Java
  • Помощь по задачам
  • Цены
Сообщество
  • Пользователи
  • Статьи
  • Форум
  • Чат
  • Истории успеха
  • Активности
Компания
  • О нас
  • Контакты
  • Отзывы
  • FAQ
  • Поддержка
JavaRushJavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.
Подписывайтесь
Язык интерфейса
Русский
English Українська
"Программистами не рождаются" © 2026 JavaRush
MastercardVisa
"Программистами не рождаются" © 2026 JavaRush