gpt4 book ai didi

java - 使用 JarOutputStream 生成的 JAR 具有无效的 .class

转载 作者:行者123 更新时间:2023-11-30 06:29:35 24 4
gpt4 key购买 nike

我的目标是获取一些 .class 的流并创建一个 JAR。

问题是创建的 JAR 存储了 .class,但不能用作类路径(它只是找不到类)。 JAR 没有损坏,如果我解压 JAR,我就可以使用 .classes。那么,这段代码有什么问题呢?

@Test
public void createJARTest() throws IOException
{
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
final JarOutputStream jarOutputStream = new JarOutputStream( byteArrayOutputStream );

final String path = "/com/app/MyClass.class";

final JarEntry entry = new JarEntry( path );
jarOutputStream.putNextEntry( entry );

final BufferedInputStream in = new BufferedInputStream( this.getClass().getResourceAsStream(path) );

final byte[] buffer = new byte[1024];
int bytesRead = 0;
while ( (bytesRead = in.read( buffer )) != -1 )
{
jarOutputStream.write( buffer, 0, bytesRead );
}
in.close();
jarOutputStream.closeEntry();

jarOutputStream.close();

byteArrayOutputStream.writeTo( new FileOutputStream("/Downloads/classpath.jar") );
byteArrayOutputStream.close();
}

最佳答案

我发现了问题:

JarOutputStream 有三个未记录的怪癖:

  1. 目录名称必须以“/”斜杠结尾。
  2. 路径必须使用“/”斜杠,而不是“\”
  3. 条目不得以“/”斜杠开头。

所以,解决方案只是改变一行:

final JarEntry entry = new JarEntry( "com/app/MyClass.class" );

关于java - 使用 JarOutputStream 生成的 JAR 具有无效的 .class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46417158/

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