gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:33:19 30 4
gpt4 key购买 nike

我用 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com