public class Solution {
public static void main(String[] args) throws IOException {
String filename = args[0];
String zipPath = args[1];
String resultFileName = "new" + File.separator + Paths.get(filename).getFileName().toString();
Map<String, ByteArrayOutputStream> tmp = new HashMap<>();
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipPath));
while (zis.available() > 0) {
ZipEntry ze = zis.getNextEntry();
if (ze.getName().equals(resultFileName))
continue;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = zis.read(buffer)) > 0) {
baos.write(buffer, 0, length);
}
tmp.put(ze.getName(), baos);
zis.closeEntry();
}
zis.close();
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipPath));
for (Map.Entry<String, ByteArrayOutputStream> entry : tmp.entrySet()) {
zos.putNextEntry(new ZipEntry(entry.getKey()));
zos.write(entry.getValue().toByteArray());
zos.closeEntry();
}
zos.putNextEntry(new ZipEntry(resultFileName));
Files.copy(Paths.get(filename), zos);
zos.closeEntry();
zos.close();
}
}
Дмитрий
41 уровень
Помогите, не проходит по 4 пункту
Обсуждается
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Дмитрий
1 сентября 2020, 10:54
String filename = args[0];
String zipPath = args[1];
String resultFileName = "new/" + Paths.get(filename).getFileName().toString();
Map<String, ByteArrayOutputStream> tmp = new HashMap<>();
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipPath));
while (zis.available() > 0) {
ZipEntry ze = zis.getNextEntry();
if (ze.getName().equals(filename))
continue;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int length;
while ((length = zis.read(buffer)) > 0) {
baos.write(buffer, 0, length);
}
tmp.put(ze.getName(), baos);
zis.closeEntry();
}
0
Дмитрий
1 сентября 2020, 10:53
Привет)
если заменить на if (ze.getName().equals(filename))
continue; и сепаратор на "new/"
то все равно не помогает.
0
graybay
31 августа 2020, 15:17
Привет.
Нужно не включать в Map tmp, ту ZipEntry у которой имя равно filename.
А в коде идет сравнение с resultFileName:
спецификации для совместимости с другими ОС:
Это будет "/".
И еще такой момент:
File.separator вернет платформо-зависимый символ разделителя.
Например, для Windows это "\", для Linux "/".
А в Zip архиве желательно использовать разделитель определенный в 0