Also mache ich einen Downloader und Entzipper für ein Spiel, aber ich bin nicht in der Lage, den Fortschritt des Entpackens zu bekommen. Das ist mein unzip Methode:Holen Sie sich den Fortschritt der Entpackdatei in 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());
}
Also habe ich versucht, einige Dinge zu tun, aber ich kann die 2 verschiedenen Größen nicht bekommen was ich brauche. Was ich denke sind: Die Größe der unkomprimierten Zip-Datei und die Größe der nächsten Datei, die es entpacken wird. Ich habe versucht, dies zu tun mit:
int finalSize = zip.size();
und
current += entry.getCompressedSize();
Es gibt keine genaue Methode, dies zu tun, ohne zweimal durchzugehen. Eine komprimierte Datei ist nicht einmal garantiert kleiner als das Original. Komm einfach mit einer unendlichen Bitte warten Sie. –
Okay, also ist es nicht wirklich eine Option, es zweimal durchzugehen und ich sollte den Spielern nur eine Nachricht präsentieren: "Entpacken, bitte warten."? – xX4m4zingXx
Das ist richtig –