2012-01-30 2 views
1

.jar 파일의 내용을 다른 디렉토리로 추출한 다음 해당 디렉토리에 파일을 추가하고 디렉토리를 다시 압축 할 수 있는지 궁금합니다. jar 파일을 추가합니다. 내가 찾은 jar 파일을 추출하는 방법은 NSTask을 사용하여 jar xf (location of jar file)이라는 터미널 명령을 실행하는 것입니다. 이것은 효과가 있었지만 프로그램의 UI를 영구적으로 중단 시켰습니다 (충돌하지 않고). 응용 프로그램이 저장된 디렉토리로 내용을 보관 취소했습니다. 이 작업을 수행하는 또 다른 방법이 있습니까, 아니면 NSTask을 잘못 사용하고 있습니까?Objective-C에서 .jar 파일의 압축 해제

//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];} 

아마, 파일을 보관 해제 다른 파일을 추가 한 다음 재 것이다 엑스 코드에서 자바 응용 프로그램을 포함 할 수있는 방법이 있나요 : 여기에 내가 사용하고있는 코드는 그것을 압축? 그런 다음 NSTask으로 java 응용 프로그램을 실행 하시겠습니까? 사전에

감사합니다,

+0

* ".jar ..의 내용을 추출한 다음 .jar 파일에 일부 파일을 다시 추가 할 수 있습니다."*이 모든 것을 통해 실제로 달성하려는 내용은 무엇입니까? 가장 좋은 해결책은 여분의 리소스를 Jar로 처리 한 다음 앱의 런타임 클래스 경로에 추가하는 것입니다. 이것은 Jar를 원래의 Jar 파일로 변경할 필요는 없지만 Manifest를 업데이트하여 클래스 경로에 추가 Jar 파일을 추가해야 할 수도 있습니다. –

+0

jar 파일 형식은 zip 파일 형식입니다. obj-c에 zip 라이브러리가 있으면 jar 파일을 열고 압축하는 데 사용할 수 있습니다. 매니페스트가 먼저 필요하지만 실제로는 결코 문제가되지 않았으므로 (가능한) 합병증이 있습니다. 항아리를 수정해야 할 때 일반적으로 zip 파일 편집기를 사용합니다. – Erik

답변

1

.jar 파일이 다른 확장자를 가진 .zip 파일에 불과하다. 그렇지 않으면 ZIP 파일을 열 수있는 lib로 파일을 열 수 있습니다.

변경 내용과 JAR 작성 방법에 따라 checksum의 변경 사항을 반영하여 manifest.mf 파일을 /META-INF/에 업데이트해야 할 수도 있습니다.

+0

답장을 보내 주셔서 감사합니다! Apple이 자체적으로 제공하지 않는 오픈 소스 zip 파일 라이브러리 중 하나를 사용해 보겠습니다. 내가 사용하는 수동 방법을 대체 할 응용 프로그램을 작성 중이며 언제 수동 방법을 사용했는지 항상 META-INF 파일을 삭제했습니다. – GravityScore

+0

오늘 아침 귀하의 방법을 구현했으며 훌륭하게 작동했습니다! 답변을 주셔서 대단히 감사드립니다. – GravityScore