将当前类加载到JarOutputStream中

时间:2012-08-05 20:55:38

标签: java class jar

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

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

1 个答案:

答案 0 :(得分:1)

请勿尝试将类文件作为File - 只需直接获取流:

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

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