Java 替换预先存在的jar文件中的字符串
我正在寻找一种方法来替换预先存在的.jar文件中的Java 替换预先存在的jar文件中的字符串,java,jar,Java,Jar,我正在寻找一种方法来替换预先存在的.jar文件中的%%\uuuu USER\uuuu%%字符串,然后让用户下载它。我没有任何代码可以共享,因为这只是理论上的,我不知道从哪里开始 我不知道有什么方法可以实现这一点,可能是通过字节码?任何帮助都将不胜感激 更多信息: 文件已经编译并存储在web服务器上。它们由社区成员上传,%%\uuuuuuu用户\uuuuuuu%%代码将用于跟踪许可证分析。每次下载文件时都需要将此代码更改为下载用户代码。JAR文件基本上只是一个ZIP文件。要在用户下载JAR文件时实
%%\uuuu USER\uuuu%%
字符串,然后让用户下载它。我没有任何代码可以共享,因为这只是理论上的,我不知道从哪里开始
我不知道有什么方法可以实现这一点,可能是通过字节码?任何帮助都将不胜感激
更多信息:
文件已经编译并存储在web服务器上。它们由社区成员上传,
%%\uuuuuuu用户\uuuuuuu%%
代码将用于跟踪许可证分析。每次下载文件时都需要将此代码更改为下载用户代码。JAR文件基本上只是一个ZIP文件。要在用户下载JAR文件时实时更新该文件,可以使用和
例如:
response.setContentType(“应用程序/八位字节流”);
setHeader(“内容处置”、“附件;文件名=\”foo.jar\”);
试一试(
ZipInputStream in=新的ZipInputStream(this.getClass().getResourceAsStream(“template.jar”);
ZipOutputStream out=新的zipoutpstream(response.getOutputStream());
) {
for(ZipEntry-ZipEntry;(ZipEntry=in.getNextEntry())!=null;){
out.putNextEntry(新的ZipEntry(ZipEntry.getName());
if(zipEntry.getName().equals(“special.txt”)){
copySpecial(输入、输出);
}否则{
copyStream(输入,输出);//不关闭流
}
}
}
static void copysecial(输入流输入,输出流输出){
BufferedReader reader=新的BufferedReader(新的InputStreamReader(in));
PrintWriter writer=新的PrintWriter(新的BufferedWriter(新的OutputStreamWriter(out));
for(字符串行;(line=reader.readLine())!=null;){
行=行。替换(“%%\\\\\\\\\\\\\\%”,“John Doe”);
writer.println(行);
}
writer.flush();
//不要关闭读写器
}
可能(假设您希望/需要在现有类中更改该字符串):
- 提取罐
- 使用javassist或ByteBuddy读取并修改类文件?我没有这样做,但这似乎意味着这是可能的
- 再次使用zip/jar(如果签名,您可能不得不辞职)
copyream(in,out)
does@Lino我认为这个名称足以显示它将所有字节从in
复制到out
。