Локально отрабатывает нормально. В чем могут быть грабли?
Если вместо
Files.copy(fileName, zip);
ставлю
zip.write(Files.readAllBytes(fileName));
то валидатор ругается, что нужно использовать Files.copy()package com.javarush.task.task31.task3105;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
/*
Добавление файла в архив
*/
public class Solution {
public static void main(String[] args) throws IOException {
if (args.length == 2) {
Path fileName = Paths.get(args[0]);
String zipFileName = args[1];
ZipInputStream zin = new ZipInputStream(new FileInputStream(zipFileName));
LinkedHashMap<String, ArrayList<String>> map = new LinkedHashMap<>();
for (ZipEntry zipEntry; (zipEntry = zin.getNextEntry()) != null; ) {
String zipEntryName = Paths.get(zipEntry.getName()).getFileName().toString();
String newFileName = fileName.getFileName().toString();
if (!zipEntryName.equals(newFileName)) {
Scanner sc = new Scanner(zin);
ArrayList<String> list = new ArrayList<>();
while (sc.hasNextLine()) {
list.add(sc.nextLine());
}
map.put(zipEntry.getName(), list);
}
}
zin.close();
ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(zipFileName));
zip.putNextEntry(new ZipEntry("new" + File.separator + fileName.getFileName().toString()));
Files.copy(fileName, zip);
zip.closeEntry();
for (Map.Entry<String, ArrayList<String>> entry: map.entrySet()) {
zip.putNextEntry(new ZipEntry(entry.getKey()));
for (String line: entry.getValue()) {
zip.write(line.getBytes());
zip.write(System.lineSeparator().getBytes());
}
zip.closeEntry();
}
zip.close();
}
}
}