0

実行時に現在のクラスをロードし、作成している別の.jarに追加する必要があるアプリケーションを構築しています。jarファイルにファイルを追加するメソッドがあります。

private static void add(File source, JarOutputStream target,
        Manifest manifest) throws IOException {
    BufferedInputStream in = null;
    try {
        String name = source.getName();
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        in = new BufferedInputStream(new FileInputStream(source));

        byte[] buffer = new byte[1024];
        while (true) {
            int count = in.read(buffer);
            if (count == -1)
                break;
            target.write(buffer, 0, count);
        }
        target.closeEntry();
    } finally {
        if (in != null)
            in.close();
    }
}

私の問題はこれです:実行時に現在のクラスをファイルに追加する方法を見つけることができないようです。私はこれを試しました:

File classFile= new File(getClass().getResource("MyClass.class").getPath());

しかし、nullポインタ例外が発生します。どんな助けでも大歓迎です。

4

1 に答える 1

1

クラスファイルを-として取得しようとしないでくださいFile。ストリームを直接フェッチするだけです。

InputStream classFile = getClass().getResourceAsStream("MyClass.class");

addもちろん、ターゲット名と入力ストリームを取得するようにメソッドを変更する必要があります。(オーバーロードする可能性があるため、既存のメソッドを引き続き使用できます。このメソッドでは、ファイルを開き、他のメソッドを呼び出してから、ストリームを閉じます。)

于 2012-08-05T21:02:28.693 に答える