使用类加载器时如何加载资源?

时间:2012-08-12 04:49:08

标签: java resources bcel

我正在使用JarFile和JarURLConnection从jar文件中加载文件。我正在上课,并通过BCEL(ByteCode工程库,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;
}

现在,它打印出“LOADING RESOURCE:filename”,但它然后给了我一个MalformedURLException(我没有协议atm,只是一个文件路径,这不是一个真正的有效路径,但它只是尝试给它到下面的Handler课程。)

类Handler扩展了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*/;
        }

    };
}

}

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

0 个答案:

没有答案