我正在使用 JarFile 和 JarURLConnection 从 jar 文件中加载文件。然后我学习这些课程,并通过 BCEL(字节码工程库,apache 库)加载它们。我不能直接使用类加载器,因为我用 BCEL 稍微修改了一些类。我需要将类按它们的字节加载到我的 bcel 加载器中。但是,我正在加载的类之一引用了资源。这个资源在 jar 里面,所以我可以得到这个文件(当迭代 JarFile 中的条目时,我忽略了常规文件,并取类文件以便稍后加载)。但是仅仅拥有该文件对我没有任何好处,因为该类将其作为资源加载。有什么方法可以从 jar 中获取该资源(我可以将其加载到 byte[] 中,
这里有很多东西,如果有什么令人困惑的地方,请在评论中提问,我可能说错了什么,或者完全错过了什么:) 谢谢
我将在这里展示一些我的类加载器(扩展 ClassLoader):
@Override
public URL getResource(String name) {
System.out.println("LOADING RESOURCE: " + name);
try {
return new URL(null, name, new Handler(files));
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
现在,它正在打印出“加载资源:文件名”,但它随后给了我一个 MalformedURLException(我没有协议 atm,只有一个文件路径,这不是一个真正有效的路径,但它只是试图将它提供给我的处理程序下面的类)。
类处理程序扩展 URLStreamHandler {
@Override
protected URLConnection openConnection(URL u) throws IOException {
return new URLConnection(u) {
@Override
public void connect() throws IOException {
}
@Override
public InputStream getInputStream() throws IOException {
System.out.println("IS: " + url);
return /*method to get input steam*/;
}
};
}
}
/*获取输入蒸汽的方法*/ 在我的真实代码中设置,但这与这里无关。那么有什么进一步的想法吗?