从类文件重建jar文件

时间:2015-01-29 14:00:06

标签: java

我想编辑已编译Java应用程序的单个文件。我使用Java编写的程序提取了这个应用程序的内容。然后我反编译了我需要编辑的类文件,进行了我的更改,重新编译了类,并用这个新文件替换了旧文件。

我现在想用这些新改造来重建项目。我已经读过这个“jar cfv”命令,但是我不太确定它是不是我正在寻找的。我尝试了但是收到了一个错误:

Error: Unable to access jarfile cfv

这是我写的提取器(为了让你了解提取的项目):

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Scanner;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class Main {

private static int directoryCount = 0;
private static int fileCount = 0;

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    while (scanner.hasNext()) {
        String nextLine = scanner.nextLine();
        String regex = "extract ";

        if (nextLine.startsWith(regex)) {
            String[] split = nextLine.split(regex);
            String sourceFilePath = split[1];

            File sourceFile = new File(sourceFilePath);

            if (!sourceFile.exists()) {
                System.err.println("Invalid file.");
                continue;
            }

            System.out.println("Beginning extraction.");

            try {
                extract(sourceFile);
            } catch (IOException e) {
                e.printStackTrace();
            }

            System.out.println("Finished extraction. Extracted a total of " + fileCount + " files and " + directoryCount + " directories.");
            fileCount = 0;
            directoryCount = 0;
        }
    }

    scanner.close();
}

private static void extract(File sourceFile) throws IOException {
    JarFile jar = new JarFile(sourceFile);
    Enumeration < JarEntry > enumEntries = jar.entries();

    File destination = new File(sourceFile.getParentFile(), sourceFile.getName().replace(".jar", ""));

    if (!destination.exists()) {
        destination.mkdir();
    }

    while (enumEntries.hasMoreElements()) {
        JarEntry file = enumEntries.nextElement();
        System.out.println("Extracting: " + file.getName());

        File f = new File(destination, file.getName());

        if (file.isDirectory()) {
            f.mkdir();
            directoryCount++;
            continue;
        }

        if (f.getParentFile() != null && !f.getParentFile().exists()) {
            f.getParentFile().mkdir();
            directoryCount++;
        }

        f.createNewFile();

        InputStream is = jar.getInputStream(file);
        FileOutputStream fos = new FileOutputStream(f);

        while (is.available() > 0) {
            fos.write(is.read());
        }

        fos.close();
        is.close();

        fileCount++;
    }

    jar.close();
}
}

项目被解压缩到包含原始jar文件中所有内容的文件夹中。现在我该如何重建项目?

0 个答案:

没有答案