0

我正在使用 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*/;
        }

    };
}

}

/*获取输入蒸汽的方法*/ 在我的真实代码中设置,但这与这里无关。那么有什么进一步的想法吗?

4

0 回答 0