Re: ClassLoaders and finding fully-qualified names
ballpointpenthief wrote:
A user selects the Hello.class file from a JFileChooser.
The Hello.class file is sent to subclass of SecureClassLoader.
The ClassLoader needs the fully-qualified classname (mypackage.Hello)
to define the class (along with the bytecode, and the CodeSource),
so....
how can I find out that Hello is in 'mypackage' if all I have is the
File?
You can specify null to defineClass.
Here are a standalone example:
package december;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class ClassnameFinder {
private static byte[] load(String fnm) throws IOException {
File f = new File(fnm);
byte[] b = new byte[(int)f.length()];
InputStream is = new FileInputStream(f);
is.read(b);
is.close();
return b;
}
public static String getClassname(String fnm) throws IOException,
ClassNotFoundException {
ClassnameFinderHelper help = new ClassnameFinderHelper();
return help.getClassname(load(fnm));
}
public static void main(String[] args) throws Exception {
System.out.println(getClassname("C:\\X.class"));
}
}
class ClassnameFinderHelper extends ClassLoader {
public String getClassname(byte[] bc) {
return defineClass(null, bc, 0, bc.length).getName();
}
}
Arne