Я написал некоторый код, который извлекает zip-файл и распаковывает его в директорию.ZIP-файл содержит две папки, и в зависимости от того, в какой папке находится каждый файл, он распаковывается в папку этого каталога.
Однако запуск кода занимает очень много времени (около 10 минут).Хотя в каждой папке содержится около 1000 файлов, а общий размер zip-файла составляет 5000 КБ.Я думаю, что это идет медленно, потому что я создаю FileOutputStream и InputStream каждый раз, когда я вхожу в цикл.Однако мне нужно сделать это, поскольку я не знаю выходной каталог файла, пока не прочитал его из zip-файла.(Т.е. выяснить, в какой папке он находится)
Есть предложения?
/**
* Retrieves and unzips a file from its URL
*/
public void retrieveFiles(String URL) {
//Retrieve file from URL
File zip = new File(getFile(URL));
zip.mkdirs();
try {
//Create .zip file from file directory
ZipFile zipFile = new ZipFile(zip);
Enumeration<? extends ZipEntry> enumeration = zipFile.entries();
//While zip file contains elements, get the next zipped file
while (enumeration.hasMoreElements()) {
ZipEntry zipEntry = (ZipEntry) enumeration.nextElement();
//Ignore folders and other zip files
if(!zipEntry.isDirectory() && !zipEntry.getName().endsWith(".zip")){
//Find directory and filename for new unzipped file
String directory = getURL(zipEntry.getName());
String fileName = getFileName(zipEntry.getName());
String fullDirectory = createDirectory(directory, fileName);
//Unzip file and store in directory
System.out.println("Unzipping file: " + fileName);
FileOutputStream fout = new FileOutputStream(fullDirectory);
InputStream in = zipFile.getInputStream(zipEntry);
for (int c = in.read(); c != -1; c = in.read()) {
fout.write(c);
}
zipFile.getInputStream(zipEntry).close();
in.close();
fout.close();
}
}
zipFile.close();
System.out.println("Unzipping complete!");
zip.delete();
} catch (IOException e) {
System.out.println("Unzip failed");
e.printStackTrace();
}
}