Подскажите, пожалуйста, что требуется поменять для получения рабочего кода и прохождения 4 пункта валидации.
Свой вариант проверил, он работает, но тест не проходит.
В инете нашел вариант, который видимо заменит мой код при переходе к следующим задачам. Он не работает, но тест проходит.
public void extractAll(Path outputFolder) throws Exception {
if (!Files.isRegularFile(zipFile))
throw new WrongZipFileException();
try (ZipInputStream in = new ZipInputStream(Files.newInputStream(zipFile))) {
if (Files.notExists(outputFolder))
Files.createDirectories(outputFolder);
ZipEntry zipEntry = null;
while ((zipEntry = in.getNextEntry()) != null) {
Path fileFullName = outputFolder.resolve(zipEntry.getName());
// Вариант javarush(?), который работает некорректно
// Создаем необходимые директории
// Path parent = fileFullName.getParent();
// if (Files.notExists(parent))
// Files.createDirectories(parent);
// try (OutputStream out = Files.newOutputStream(fileFullName)) {
// copyData(in, out);
// }
if (zipEntry.isDirectory()) {
Files.createDirectories(fileFullName);
} else {
try (OutputStream out = Files.newOutputStream(fileFullName)) {
copyData(in, out);
}
}
in.closeEntry();
}
}
}
package com.javarush.task.task31.task3110;
import com.javarush.task.task31.task3110.exception.WrongZipFileException;
import java.io.IOException;
public class Archiver {
public static void main(String[] args) throws IOException {
Operation operation = null;
do {
try {
operation = askOperation();
CommandExecutor.execute(operation);
} catch (WrongZipFileException e) {
ConsoleHelper.writeMessage("Вы не выбрали файл архива или выбрали неверный файл.");
} catch (Exception e) {
ConsoleHelper.writeMessage("Произошла ошибка. Проверьте введенные данные.");
System.out.println(e);
for (StackTraceElement element : e.getStackTrace()) {
System.out.println(element);
}
}
} while (operation != Operation.EXIT);
}
public static Operation askOperation() throws IOException {
ConsoleHelper.writeMessage("");
ConsoleHelper.writeMessage("Выберите операцию:");
ConsoleHelper.writeMessage(String.format("\t %d - упаковать файлы в архив", Operation.CREATE.ordinal()));
ConsoleHelper.writeMessage(String.format("\t %d - добавить файл в архив", Operation.ADD.ordinal()));
ConsoleHelper.writeMessage(String.format("\t %d - удалить файл из архива", Operation.REMOVE.ordinal()));
ConsoleHelper.writeMessage(String.format("\t %d - распаковать архив", Operation.EXTRACT.ordinal()));
ConsoleHelper.writeMessage(String.format("\t %d - просмотреть содержимое архива", Operation.CONTENT.ordinal()));
ConsoleHelper.writeMessage(String.format("\t %d - выход", Operation.EXIT.ordinal()));
return Operation.values()[ConsoleHelper.readInt()];
}
}