你如何创建一个用Java创建.jar文件的函数?

时间:2012-02-14 23:49:16

标签: java file jar

我在Java中创建了一些代码,它将更改另一个.jar文件中的某些文件,我知道解包/更改有效,但重新打包却没有。它确实成功了,但是当我比较新的和原始的(我删除了更改文件的代码)时,它们不同。有趣的是,当我将它们都提取到不同的目录中时,我对它们都运行了diff -rqy,它没有显示出任何差异。

这是当前的功能:

public static void add(File source, JarOutputStream target, String removeme)
        throws IOException
{
    BufferedInputStream in = null;
    try
    {
        File source2 = new File(source.getPath().replaceAll("^" + removeme,
                ""));
        // File source2 = source;
        if (source.isDirectory())
        {
            String name = source2.getPath().replace("\\", "/");
            if (!name.isEmpty())
            {
                if (!name.endsWith("/"))
                    name += "/";
                JarEntry entry = new JarEntry(name);
                entry.setTime(source.lastModified());
                target.putNextEntry(entry);
                target.closeEntry();
            }
            for (File nestedFile : source.listFiles())
                add(nestedFile, target, removeme);
            return;
        }

        JarEntry entry = new JarEntry(source2.getPath().replace("\\", "/"));
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        in = new BufferedInputStream(new FileInputStream(source));

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

我称之为:

JarOutputStream zip = new JarOutputStream(
                        new FileOutputStream(JARFILE));
                for (File nestedFile : new File(DIRECTORY).listFiles())
                {
                    Utils.add(nestedFile, zip,
                            new File(DIRECTORY).getAbsolutePath());
                }
                zip.close();

任何人都可以指导我在功能上改变什么,或者我应该使用哪些其他功能?该目录有子目录,所以我需要一个能扫描它们的函数。

提前致谢!

编辑:我不想使用jar命令,因为我不希望用户需要安装JDK。我想要使​​用纯Java的东西(库可以,只要我可以将它们包含在程序中)。

编辑2:我正在制作一个Minecraft模组(如MCPatcher和ModLoader),但当我运行java -jar minecraft.jar时,它会给我这个:Invalid or corrupt jarfile。正确的.jar不会给出这个(只是一个主类错误,应该发生)。

1 个答案:

答案 0 :(得分:1)

我想你可能对java.util.jar感兴趣。此链接可能对您有用..

http://www.theserverside.com/discussions/thread.tss?thread_id=32600