8
I'm using a bytecode library known as ASM to alter classfiles, then I want to write each classfile back into a jar file rather than a folder filled with class files. I do this by running this code:
My problem occurs when a ZipException is throw for not being the expected size, i.e.
java.util.zip.ZipException: invalid entry compressed size (expected 695 but got 693 bytes)
at java.util.zip.ZipOutputStream.closeEntry(Unknown Source)
at org.steinburg.client.accessor.Accessor.accessJar(Accessor.java:64)
at org.steinburg.client.accessor.Accessor.<init>(Accessor.java:41)
at Loader.main(Loader.java:5)
package org.steinburg.client.accessor;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.JarOutputStream;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassWriter;
public class Accessor {
private String input;
private File inFile;
private JarEntry jarEntry;
private JarFile jarFile;
private Enumeration<JarEntry> entries;
private InputStream is;
private String out;
private File outFile;
private FileOutputStream fos;
private JarOutputStream jos;
private byte[] bytes;
public Accessor(){
try{
input = new String("Input Jar.jar");
inFile = new File(input);
jarFile = new JarFile(inFile);
entries = jarFile.entries();
out = new String("Output Jar.jar");
outFile = new File(out);
fos = new FileOutputStream(outFile);
jos = new JarOutputStream(fos);
accessJar();
} catch (Exception e) {
e.printStackTrace();
}
}
protected final void accessJar(){
try {
while (entries.hasMoreElements()){
jarEntry = entries.nextElement();
is = jarFile.getInputStream(jarEntry);
if (jarEntry.getName().endsWith(".class")){