Добавление файла в архив
В метод 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
Подсказка: нужно сначала куда-то сохранить содержимое всех энтри, а потом записать в архив все энтри вместе с добавленным файлом.
Пользоваться файловой системой нельзя.
Требования:
1. В методе main создай ZipInputStream для архивного файла (второй аргумент main). Нужно вычитать из него все содержимое.
2. В методе main создай ZipOutputStream для архивного файла (второй аргумент main).
3. В ZipOutputStream нужно записать содержимое файла, который приходит первым аргументом в main.
4. В ZipOutputStream нужно записать все остальное содержимое, которое было вычитано из ZipInputStream.
5. Потоки для работы с архивом должны быть закрыты.
package com.javarush.task.task31.task3105;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
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 tempFile = Files.createTempFile("", "");
try (ZipOutputStream zipOutputStream = new ZipOutputStream(Files.newOutputStream(tempFile))) {
try (ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(Paths.get(args[1])))) {
ZipEntry zipEntry = zipInputStream.getNextEntry();
while(zipEntry != null){
String name = zipEntry.getName();
zipOutputStream.putNextEntry(new ZipEntry(name));
while (zipInputStream.available() != 0){
zipOutputStream.write(zipInputStream.read());
}
zipOutputStream.closeEntry();
zipInputStream.closeEntry();
zipEntry = zipInputStream.getNextEntry();
}
}
try (FileInputStream inputStream = new FileInputStream(args[0])) {
zipOutputStream.putNextEntry(new ZipEntry("new\\" + Paths.get(args[0]).getFileName()));
while (inputStream.available() > 0) {
zipOutputStream.write(inputStream.read());
}
zipOutputStream.closeEntry();
}
}
Files.move(tempFile, Paths.get(args[1]), StandardCopyOption.REPLACE_EXISTING);
}
}
Тоесть он ни один пункт не принимает! программа работает, добавляет файл в архив, в директорию new, все как в тз..