1、 将文件从zip中读到内存中
2、将文件从内存写入到zip中
3、在中间目录中向指定目录中追加(追加的顺序很重要,必须要先放目录,再放追加的文件,如果顺序错了会导致文件夹错乱,文件也读取不到)
public static void main(String[] args){
boolean flag = true;
try (ZipInputStream in = new ZipInputStream(new FileInputStream("C:\\Users\\Dell\\Downloads\\native-libraries (2).zip"));
ZipOutputStream zipOutputStream = new ZipOutputStream(new FileOutputStream("C:\\Users\\Dell\\Downloads\\1.zip"));) {
// 遍历zip文件中的每个子文件
ZipEntry zipEntry = null;
while ((zipEntry = in.getNextEntry()) != null) {
// 获取zip压缩包中的子文件名称
String zipEntryFileName = zipEntry.getName();
String libPath = zipEntryFileName.substring(0, zipEntryFileName.indexOf("/")) + "/lib/";
if(zipEntryFileName.contains(libPath)&&libPath.length()<zipEntryFileName.length()&&flag){
flag = false;
String zipFileName = libPath+"libppkg.dll";
zipOutputStream.putNextEntry(new ZipEntry(zipFileName));
byte[] bytes2 = "server.getRsaPub()".getBytes(StandardCharsets.UTF_8);
zipOutputStream.write(bytes2, 0, bytes2.length);
zipOutputStream.closeEntry();
}
// 读取该子文件的字节内容
zipOutputStream.putNextEntry(new ZipEntry(zipEntryFileName));
byte[] buff = new byte[1024];
int len = -1;
while ((len = in.read(buff)) != -1) {
zipOutputStream.write(buff, 0, buff.length);
}
zipOutputStream.closeEntry();
}
zipOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
}