Так что я делаю загрузчик и unzipper для игры, но я не могу получить ход распаковки. Это мой распакуйте метод:Получите прогресс в распаковке файла в java
static public void unzip(cachePart name) throws ZipException, IOException {
System.out.println("Unzipping " + name.getFile());
int BUFFER = 2048;
long current = 0;
File file = new File(name.getFilePath());
ZipFile zip = new ZipFile(file);
//String newPath = zipFile.substring(0, zipFile.length() - 4);
int finalSize = zip.size();
//new File(newPath).mkdir();
Enumeration<?> zipFileEntries = zip.entries();
// Process each entry
while (zipFileEntries.hasMoreElements()) {
// grab a zip file entry
ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();
current += entry.getCompressedSize();
//long finalSize = entry.getSize();
int percentage;
String currentEntry = entry.getName();
File destFile = new File(Data.SAVE_DIR, currentEntry);
//destFile = new File(newPath, destFile.getName());
File destinationParent = destFile.getParentFile();
// create the parent directory structure if needed
destinationParent.mkdirs();
if (!entry.isDirectory()) {
BufferedInputStream is = new BufferedInputStream(zip.getInputStream(entry));
int currentByte;
// establish buffer for writing file
byte data[] = new byte[BUFFER];
// write the current file to disk
FileOutputStream fos = new FileOutputStream(destFile);
BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);
// read and write until last byte is encountered
while ((currentByte = is.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, currentByte);
}
percentage = (int) (current/finalSize * 100);
System.out.println("finalSize " + finalSize);
System.out.println("Current " + current);
System.out.println("percentage " + percentage + "%");
dest.flush();
dest.close();
is.close();
}
}
zip.close();
System.out.println("Done unzipping " + name.getFile());
}
Так что я пытался сделать некоторые вещи, но я не могу получить 2 разных размеров, мне нужно. Что я думаю: размер несжатого zip-файла и размер следующего файла, который он собирается разархивировать. Я пытался делать это с:
int finalSize = zip.size();
и
current += entry.getCompressedSize();
Нет точного способа сделать это, не пройдя через него дважды. Сжатый файл даже не гарантированно меньше оригинала. Просто придумай бесконечный, пожалуйста, подождите. –
Хорошо, так что пройти через это дважды - это не вариант, и я должен просто представить игрокам сообщение: «Разархивировать, пожалуйста, подождите».? – xX4m4zingXx
Это правильно –