Я сделал некоторый код на 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 этого не дает (просто ошибка основного класса, которая должна произойти).