Skip to content

Commit 8bc3090

Browse files
authored
he will convict the world
When he has come, he will convict the world about sin, about righteousness, and about judgment; (John 16:8)
1 parent 75e2bc8 commit 8bc3090

1 file changed

Lines changed: 116 additions & 0 deletions

File tree

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
2+
//When he has come, he will convict the world about sin, about righteousness, and about judgment; (John 16:8)
3+
4+
package com.javarush.task.task31.task3105;
5+
6+
import java.io.*;
7+
import java.nio.file.Paths;
8+
import java.nio.file.Files;
9+
import java.util.HashMap;
10+
import java.util.Map;
11+
import java.util.zip.ZipEntry;
12+
import java.util.zip.ZipInputStream;
13+
import java.util.zip.ZipOutputStream;
14+
15+
/*
16+
Добавление файла в архив
17+
*/
18+
public class Solution {
19+
public static void main(String[] args) throws IOException {
20+
String fileName = args[0];
21+
String zip = args[1];
22+
String newFileName = "new" + File.separator + Paths.get(fileName).getFileName().toString();
23+
24+
Map<ZipEntry, ByteArrayOutputStream> map = new HashMap<>();
25+
try (ZipInputStream zipReader = new ZipInputStream(new FileInputStream(zip))) {
26+
ZipEntry zipEntry;
27+
while ((zipEntry = zipReader.getNextEntry()) != null) {
28+
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
29+
byte[] buffer = new byte[1024];
30+
int count = 0;
31+
while ((count = zipReader.read(buffer)) != -1)
32+
byteArrayOutputStream.write(buffer, 0, count);
33+
map.put(zipEntry, byteArrayOutputStream);
34+
}
35+
}
36+
37+
FileOutputStream fos = new FileOutputStream(zip);
38+
ZipOutputStream zos = new ZipOutputStream(fos);
39+
40+
for(Map.Entry<ZipEntry, ByteArrayOutputStream> entry: map.entrySet()){
41+
if(!Paths.get(entry.getKey().getName()).equals(Paths.get(newFileName))){
42+
zos.putNextEntry(new ZipEntry(entry.getKey().getName()));
43+
zos.write(entry.getValue().toByteArray());
44+
}
45+
}
46+
47+
zos.putNextEntry(new ZipEntry(newFileName));
48+
File file = new File(fileName);
49+
Files.copy(file.toPath(), zos);
50+
51+
zos.close();
52+
fos.close();
53+
}
54+
}
55+
56+
/*
57+
Добавление файла в архив
58+
59+
В метод main приходит список аргументов.
60+
61+
Первый аргумент - полный путь к файлу fileName.
62+
63+
Второй аргумент - путь к zip-архиву.
64+
65+
Добавить файл (fileName) внутрь архива в директорию 'new'.
66+
67+
Если в архиве есть файл с таким именем, то заменить его.
68+
69+
70+
71+
Пример входных данных:
72+
73+
C:/result.mp3
74+
75+
C:/pathToTest/test.zip
76+
77+
78+
79+
Файлы внутри test.zip:
80+
81+
a.txt
82+
83+
b.txt
84+
85+
86+
87+
После запуска Solution.main архив test.zip должен иметь такое содержимое:
88+
89+
new/result.mp3
90+
91+
a.txt
92+
93+
b.txt
94+
95+
96+
97+
Подсказка: нужно сначала куда-то сохранить содержимое всех энтри, а потом записать в архив все энтри вместе с добавленным файлом.
98+
99+
Пользоваться файловой системой нельзя.
100+
101+
102+
103+
104+
105+
Требования:
106+
107+
1. В методе main создай ZipInputStream для архивного файла (второй аргумент main). Нужно вычитать из него все содержимое.
108+
109+
2. В методе main создай ZipOutputStream для архивного файла (второй аргумент main).
110+
111+
3. В ZipOutputStream нужно записать содержимое файла, который приходит первым аргументом в main.
112+
113+
4. В ZipOutputStream нужно записать все остальное содержимое, которое было вычитано из ZipInputStream.
114+
115+
5. Потоки для работы с архивом должны быть закрыты.
116+
*/

0 commit comments

Comments
 (0)