Sorry for this painful commit, but git somehow f'd up and sees changes in files where there aren't any.
60 lines
1.6 KiB
Java
Executable File
60 lines
1.6 KiB
Java
Executable File
package eu.crushedpixel.replaymod.utils;
|
|
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.util.zip.ZipEntry;
|
|
import java.util.zip.ZipInputStream;
|
|
import java.util.zip.ZipOutputStream;
|
|
|
|
public class ZipFileUtils {
|
|
|
|
public static void deleteZipEntry(File zipFile,
|
|
String[] files) throws IOException {
|
|
// get a temp file
|
|
File tempFile = File.createTempFile(zipFile.getName(), null);
|
|
// delete it, otherwise you cannot rename your existing zip to it.
|
|
tempFile.delete();
|
|
tempFile.deleteOnExit();
|
|
boolean renameOk=zipFile.renameTo(tempFile);
|
|
if (!renameOk)
|
|
{
|
|
throw new RuntimeException("could not rename the file "+zipFile.getAbsolutePath()+" to "+tempFile.getAbsolutePath());
|
|
}
|
|
byte[] buf = new byte[1024];
|
|
|
|
ZipInputStream zin = new ZipInputStream(new FileInputStream(tempFile));
|
|
ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(zipFile));
|
|
|
|
ZipEntry entry = zin.getNextEntry();
|
|
while (entry != null) {
|
|
String name = entry.getName();
|
|
boolean toBeDeleted = false;
|
|
for (String f : files) {
|
|
if (f.equals(name)) {
|
|
toBeDeleted = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!toBeDeleted) {
|
|
// Add ZIP entry to output stream.
|
|
zout.putNextEntry(new ZipEntry(name));
|
|
// Transfer bytes from the ZIP file to the output file
|
|
int len;
|
|
while ((len = zin.read(buf)) > 0) {
|
|
zout.write(buf, 0, len);
|
|
}
|
|
}
|
|
entry = zin.getNextEntry();
|
|
}
|
|
// Close the streams
|
|
zin.close();
|
|
// Compress the files
|
|
// Complete the ZIP file
|
|
zout.close();
|
|
tempFile.delete();
|
|
}
|
|
|
|
}
|