You are viewing a plain text version of this content. The canonical link for it is here.
Posted to bcel-user@jakarta.apache.org by Alan <no...@eircom.net> on 2003/12/06 01:52:51 UTC

Is Classpath holding onto file-handles?

My code begins thusly;

org.apache.bcel.util.ClassPath classPath = new org.apache.bcel.util.ClassPath(aPathToSomeJar);
org.apache.bcel.Repository.setRepository(org.apache.bcel.util.SyntheticRepository.getInstance(classPath));

I then load files from the repository, modify them, send them to a new jar file, and when all the modifications are complete, delete the original jar file, and rename the new one to that of the original. Or at least thats the plan.

I struggled all day to try figure out why java.io.File.delete returned false, indicating that it could not delete the original file, as per my plan. It seemed likely that a handle to the file in question was still in existance, but I couldnt figure out where it was ... until I looked in org.apache.bcel.util.ClassPath. Upon doing so I saw this line

vec.addElement(new Zip(new ZipFile(file)));

(file takes the value of each archive in the supplied classpath string). My guess is that, before I can delete the file, I have to invoke the ZipFile.close method for the ZipFile that was attached to it. My trouble is that BCEL code does not do this.

This is, I think, mostly a request for functionality in future versions, although if anyone can tell me if Im on the right or wrong track, or suggest an elegant work-around Id appreciate it. Should future revisions not include some sort of dispose() method in org.apache.bcel.util.ClassPath or org.apache.bcel.Repository that enables the user to close the files opened by BCEL?

Thanks (and apologies if Im wrong),

Al.