java - 在 Objective-C 中解压 .jar 文件

标签 java objective-c jar nstask

我想知道是否可以将 .jar 文件的内容提取到不同的目录中,然后将一些文件添加到该目录中,然后将该目录压缩回 .jar 文件中,并添加添加内容。我找到的提取 jar 文件的一种方法是使用 NSTask 执行 jar xf(jar 文件位置)的终端命令。这有效,但它永久停止了程序的 UI(不会使其崩溃),并将内容解压到存储应用程序的目录中,这需要清理一些困惑。还有另一种方法可以做到这一点,还是我错误地使用了 NSTask?这是我正在使用的代码:

//Unarchive the jar
[self runCommandWithBase:@"/usr/bin/jar" arguments:[NSArray arrayWithObjects:@"xf", jarLocation, nil]];

- (NSString *)runCommandWithBase:(NSString *)base arguments:(NSArray *)arguments {
//Create the task
NSTask *task = [[NSTask alloc] init];

//Setup the task
[task setLaunchPath:base];
[task setArguments:arguments];
[task setStandardInput:[NSPipe pipe]];
[task setStandardOutput:[NSPipe pipe]];

//Set file handle
NSFileHandle *file = [[NSPipe pipe] fileHandleForReading];

//Run the command
[task launch];

//Return
NSData *returnData = [file readDataToEndOfFile];
return [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];}

是否有一种方法可以在 Xcode 中包含一个 java 应用程序来解压文件,添加其他文件,然后重新压缩它?然后用NSTask执行java应用程序?

提前致谢,

最佳答案

.jar 文件只不过是具有不同扩展名的 .zip 文件。您可能可以使用任何可以打开 ZIP 文件的库来打开它。

不过,根据您所做的更改以及 JAR 的构建方式,您可能需要更新 /META-INF/ 上的 manifest.mf 文件以反射(reflect)对 checksum 的更改。

关于java - 在 Objective-C 中解压 .jar 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9061944/

相关文章:

java - SWT表: How to retrieve row number under mouse cursor?

java - HashMaps 和 Null 值?

ios - 动态隐藏状态栏

ios - 当我通过 uisearchbar "click"时推送 View Controller

iphone - 替换 NSFileWrappers

java - 在 HBASE 中创建表时找不到类异常

java - Minecraft 如何存储其音乐文件?

java - 加载包含在 .Jar 文件或类路径中的资源(图像)

java - SwipeRefreshLayout - 尝试在空对象引用上调用虚拟方法

java - wsimport 从 XSD 导入的枚举中的注释