java - 如何创建一个在 Java 中创建 .jar 文件的函数?

标签 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 modder(如 MCPatcher 和 ModLoader),但是当我运行 java -jar minecraft.jar 时,它会给出以下信息:无效或损坏的 jarfile 。正确的 .jar 不会给出这个(只是一个主类错误,这是应该发生的)。

最佳答案

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

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

关于java - 如何创建一个在 Java 中创建 .jar 文件的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9285971/

相关文章:

java - 获取嵌套 .jar 中的 .class 文件

java - 启动了 GUI beanshell 但应用程序卡住了

java - 无法删除java中的哈希集

PHP检查文件是否正在使用

javascript - 将 Dropzone.js 与其他表单字段集成到 html 表单中

file - SilverStripe 文件标题翻译

java - 将 comm.jar 添加到我的 jar 中

java - 弹跳球永远不会在地面上保持平静

java - 如何使用 Mockito 模拟列表方法

java - 需要 GUI 帮助