0

JarFile と JarURLConnection を使用して、jar ファイルからファイルをロードしています。次に、クラスを取得し、BCEL (ByteCode Engineering Library、Apache ライブラリ) 経由でロードします。BCELで一部のクラスを少し変更しているため、クラスローダーを直接使用することはできません。クラスをバイト単位で bcel ローダーにロードする必要があります。ただし、ロードしているクラスの 1 つがリソースを参照しています。このリソースは 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 に渡そうとするだけです)。以下のクラス)。

class Handler extends 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