Java 将当前类加载到JarOutputStream中

Java 将当前类加载到JarOutputStream中,java,class,jar,Java,Class,Jar,我正在构建一个应用程序,该应用程序必须在运行时加载当前类,并将其添加到我正在创建的另一个.jar中。我有一个将文件添加到jar的方法 private static void add(File source, JarOutputStream target, Manifest manifest) throws IOException { BufferedInputStream in = null; try { String name = source.

我正在构建一个应用程序,该应用程序必须在运行时加载当前类,并将其添加到我正在创建的另一个.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());

但我得到一个空指针异常。任何帮助都将不胜感激。

不要试图将类文件作为
文件获取-直接获取流即可:

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

当然,您需要修改
add
方法以获取目标名称和输入流。(可能会重载它,因此您仍然可以使用现有方法,只需打开文件,调用另一个方法,然后关闭流即可。)

这是主类吗?它是由引导类装入器装入的吗?这个类的包层次结构是什么?是的,这是主类。它只是默认包的一部分。是否尝试在MyClass.class:getResource(“/MyClass.class”)之前添加斜杠?如何编辑add方法以获取流?我不需要传入一个文件吗?@TBecker:目前,您正在使用有关该文件的三个方面:文件名、上次修改时间和文件中的数据(以
InputStream
的形式)。因此,如果您为类文件指定名称和
InputStream
,并选择任意的上次修改时间,这就是您所需要的,对吗?