Метод createZip в классе ZipFileManager должен быть доработан следуя описанию в задании.
рекомендация от ментора: Если в метод createZip(Path source) передается не файл и не папка, то нужно кинуть исключение PathIsNotFoundException.
Не могу никак понять что не так с этим пунктом. Подскажите пожалуйста
package com.javarush.task.task31.task3110;
import com.javarush.task.task31.task3110.exception.PathIsNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* Created by agcheb on 29.08.17.
*/
public class ZipFileManager {
private Path zipFile;
public ZipFileManager(Path zipFile) {
this.zipFile = zipFile;
}
public void createZip(Path source) {
if(Files.notExists(zipFile.getParent())) try {
Files.createDirectory(zipFile.getParent());
} catch (IOException e) {
e.printStackTrace();
}
try (ZipOutputStream out = new ZipOutputStream(Files.newOutputStream(zipFile));){
if (Files.isRegularFile(source)) {
addNewZipEntry(out,source.getParent(),source.getFileName());
}
else if (Files.isDirectory(source)){
FileManager fm = new FileManager(source);
List<Path> fileNames = fm.getFileList();
for (Path p:fileNames) {
addNewZipEntry(out,source,p);
}
}
else throw new PathIsNotFoundException();
}
catch (PathIsNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
private void addNewZipEntry(ZipOutputStream zipOutputStream, Path filePath, Path fileName) throws Exception{
try (InputStream in = Files.newInputStream(filePath.resolve(fileName))){
ZipEntry zipEntry = new ZipEntry(fileName.toString());
zipOutputStream.putNextEntry(zipEntry);
copyData(in,zipOutputStream);
zipOutputStream.close();
}
}
private void copyData(InputStream in, OutputStream out) throws Exception{
while (in.available()>0){
out.write(in.read());
}
}
}