Помогите разобраться! "Программа работала слишком долго и была закрыта!" - вот такую штуку выдает валидатор. Сначала грешил на вот эту часть кода:
while ((zipentry = zipin.getNextEntry())!=null){
ByteArrayOutputStream arr = new ByteArrayOutputStream();
byte i;
while ((i = (byte)zipin.read())!=-1) {
arr.write(i);
}
Потом, плюнув на все, взял чужое решение и попробовал сдать, как готовое, но при проверке выдал тоже самое - "Программа работала слишком долго и была закрыта!" . В чем может быть проблема? Может кто сталкивался? Куда обращаться?
В данный момент код моего решения.
package com.javarush.task.task31.task3105;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
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 {
Map<ZipEntry,ByteArrayOutputStream> mapzip = new HashMap<>();
FileInputStream zipfile = new FileInputStream(args[1]);
ZipInputStream zipin = new ZipInputStream(zipfile);
ZipEntry zipentry;
while ((zipentry = zipin.getNextEntry())!=null){
ByteArrayOutputStream arr = new ByteArrayOutputStream();
byte i;
while ((i = (byte)zipin.read())!=-1) {
arr.write(i);
}
mapzip.put(zipentry, arr);
zipin.closeEntry();
}
zipin.close();
zipfile.close();
FileOutputStream fos = new FileOutputStream(args[1]);
ZipOutputStream zipOut = new ZipOutputStream(fos);
Path file = Paths.get(args[0]);
boolean flag = true;
for (Map.Entry<ZipEntry,ByteArrayOutputStream> e: mapzip.entrySet()) {
zipOut.putNextEntry(e.getKey());
String str = e.getKey().getName();
if (str.contains("/")) {
if (str.substring(str.lastIndexOf("/")+1).equals(file.getFileName().toString())) flag = false;
}
else if (str.equals(file.getFileName())) flag = false;
zipOut.write(e.getValue().toByteArray());
zipOut.flush();
zipOut.closeEntry();
}
if (flag) {
ZipEntry result = new ZipEntry("new/" + file.getFileName().toString());
zipOut.putNextEntry(result);
Files.copy(file, zipOut);
zipOut.closeEntry();
}
zipOut.close();
fos.close();
}
}
package com.javarush.task.task31.task3105;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
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 {
Map<ZipEntry,ByteArrayOutputStream> mapzip = new HashMap<>();
FileInputStream zipfile = new FileInputStream(args[1]);
ZipInputStream zipin = new ZipInputStream(zipfile);
ZipEntry zipentry;
while ((zipentry = zipin.getNextEntry())!=null){
ByteArrayOutputStream arr = new ByteArrayOutputStream();
byte i;
while ((i = (byte)zipin.read())!=-1) {
arr.write(i);
}
mapzip.put(zipentry, arr);
zipin.closeEntry();
}
zipin.close();
zipfile.close();
FileOutputStream fos = new FileOutputStream(args[1]);
ZipOutputStream zipOut = new ZipOutputStream(fos);
Path file = Paths.get(args[0]);
boolean flag = true;
for (Map.Entry<ZipEntry,ByteArrayOutputStream> e: mapzip.entrySet()) {
zipOut.putNextEntry(e.getKey());
String str = e.getKey().getName();
if (str.contains("/")) {
if (str.substring(str.lastIndexOf("/")+1).equals(file.getFileName().toString())) flag = false;
}
else if (str.equals(file.getFileName())) flag = false;
zipOut.write(e.getValue().toByteArray());
zipOut.flush();
zipOut.closeEntry();
}
if (flag) {
ZipEntry result = new ZipEntry("new/" + file.getFileName().toString());
zipOut.putNextEntry(result);
Files.copy(file, zipOut);
zipOut.closeEntry();
}
zipOut.close();
fos.close();
}
}