public void createZip(Path source) throws Exception {
if (!Files.isDirectory(zipFile.getParent())) Files.createDirectory(zipFile.getParent());
try (ZipOutputStream zos = new ZipOutputStream(Files.newOutputStream(zipFile))) {
if (Files.isRegularFile(source)) {
addNewZipEntry(zos, source.getParent(), source.getFileName());
} else if (Files.isDirectory(source)) {
FileManager fileManager = new FileManager(source);
List<Path> fileNames = fileManager.getFileList();
for (Path path : fileNames) {
addNewZipEntry(zos, path.getParent(), path.getFileName());
}
} else throw new PathIsNotFoundException();
} catch (IOException e) {
e.printStackTrace();
}
}
private void addNewZipEntry(ZipOutputStream zipOutputStream, Path filePath, Path fileName) throws Exception {
Path path = filePath.resolve(fileName);
try (InputStream inputStream = Files.newInputStream(path)) {
//ZipEntry zipEntry = new ZipEntry(fileName.getFileName().toString());
ZipEntry zipEntry = new ZipEntry(fileName.toString());
zipOutputStream.putNextEntry(zipEntry);
copyData(inputStream, zipOutputStream);
zipOutputStream.closeEntry();
} catch (Exception e) {
e.printStackTrace();
}
}
Пробовал addNewZipEntry(zos, path.getParent(), path.getFileName()); менять на addNewZipEntry(zos, source, path.getFileName());
не помогло.
Убрал еще catch (Exception e). Не помогло.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("Произошла ошибка. Проверьте введенные данные.");
}
} 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()];
}
}