Как сделать функцию, которая будет создавать файл .jar в Java? - PullRequest
0 голосов
/ 15 февраля 2012

Я сделал некоторый код на 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 Ответ

1 голос
/ 15 февраля 2012

Я думаю, что вы, возможно, заинтересованы в java.util.jar. Эта ссылка может быть полезна для вас ..

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...