Skip to content

Commit 0a517ca

Browse files
authored
this is the record of John
And this is the record of John, when the Jews sent priests and Levites from Jerusalem to ask him, Who art thou? (John 1:19)
1 parent a3687bd commit 0a517ca

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
2+
//And this is the record of John, when the Jews sent priests and Levites from Jerusalem to ask him, Who art thou? (John 1:19)
3+
4+
package com.javarush.task.task31.task3110.command;
5+
6+
import com.javarush.task.task31.task3110.ConsoleHelper;
7+
import com.javarush.task.task31.task3110.ZipFileManager;
8+
import com.javarush.task.task31.task3110.exception.PathIsNotFoundException;
9+
10+
import java.nio.file.Path;
11+
import java.nio.file.Paths;
12+
13+
public class ZipExtractCommand extends ZipCommand {
14+
15+
@Override
16+
public void execute() throws Exception {
17+
try {
18+
ConsoleHelper.writeMessage("Распаковка архива.");
19+
20+
ZipFileManager zipFileManager = getZipFileManager();
21+
22+
ConsoleHelper.writeMessage("Введите путь для распаковки:");
23+
Path destinationPath = Paths.get(ConsoleHelper.readString());
24+
zipFileManager.extractAll(destinationPath);
25+
26+
ConsoleHelper.writeMessage("Архив был распакован.");
27+
28+
} catch (PathIsNotFoundException e) {
29+
ConsoleHelper.writeMessage("Неверный путь для распаковки.");
30+
}
31+
}
32+
}
33+
34+
/*
35+
Archiver (15)
36+
37+
Пора попробовать что-нибудь распаковать. Для этого добавим публичный метод void extractAll(Path outputFolder) throws Exception в класс ZipFileManager. Path outputFolder - это путь, куда мы будем распаковывать наш архив. У тебя уже большой опыт работы с элементами архива и потоками. Так что, я дам только подсказки по реализации этого метода, а тебе придется хорошенько подумать, как это все сделать:
38+
39+
1. Проверь, есть ли zip файл вообще
40+
41+
2. Если директория outputFolder не существует, то ее нужно создать, как и все папки, внутри которых она лежит.
42+
43+
3. Внутри архива некоторые файлы могут лежат внутри папок, тогда метод getName() элемента архива ZipEntry, вернет не совсем имя, как может показаться из названия, а относительный путь внутри архива. Этот относительный путь должен сохраниться и после распаковки, но уже относительно той директории, куда мы распаковали архив
44+
45+
4. Реализуй метод execute() класса ZipExtractCommand, по аналогии с таким же методом класса ZipCreateCommand, сделай такой же блок try-catch, только поменяй сообщения выводимые пользователю, чтобы он понял, что сейчас мы будем распаковывать архив, и что нужно ввести полное имя архива и директорию, куда будем распаковывать. Не забудь вызвать метод extractAll класса ZipFileManager, а не createZip, как это было в ZipCreateCommand
46+
47+
5. Запускай программу и наслаждайся результатом распаковки
48+
49+
50+
51+
Примечание:
52+
53+
Для получения потоков чтения и записи используй Files.newInputStream(Path path), Files.newOutputStream(Path path).
54+
55+
56+
57+
58+
59+
Требования:
60+
61+
1. В классе ZipFileManager нужно создать публичный метод void extractAll(Path outputFolder) throws Exception.
62+
63+
2. Метод extractAll(Path outputFolder) должен бросать исключение WrongZipFileException, если файл архива не существует.
64+
65+
3. Метод extractAll(Path outputFolder) должен создавать директорию outputFolder, если она не существует.
66+
67+
4. Метод extractAll(Path outputFolder) должен распаковывать все файлы из архива в директорию outputFolder.
68+
69+
5. Метод execute() в классе ZipExtractCommand должен получать объект ZipFileManager и разархивировать файлы в указанную пользователем директорию.
70+
*/

0 commit comments

Comments
 (0)