我想编辑已编译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文件中所有内容的文件夹中。现在我该如何重建项目?