I come upon a requirement to unzip a file in a platform independent way. Jim Marion got me most of the way, but his code didn’t write it to file. Here’s my adjustment to make a function that wrote it to file:
Function unzip(&inputZipFile, &targetDir) Local JavaObject &zipFileInputStream = CreateJavaObject("java.io.FileInputStream", &inputZipFile); Local JavaObject &zipInputStream = CreateJavaObject("java.util.zip.ZipInputStream", &zipFileInputStream); Local JavaObject &zipEntry = &zipInputStream.getNextEntry(); Local JavaObject &buf = CreateJavaArray("byte[]", 1024); Local number &byteCount; While &zipEntry <> Null If (&zipEntry.isDirectory()) Then REM ** do nothing; Else Local JavaObject &outFile = CreateJavaObject("java.io.File", &targetDir | &zipEntry.getName()); &outFile.getParentFile().mkdirs(); Local JavaObject &out = CreateJavaObject("java.io.FileOutputStream", &outFile); &byteCount = &zipInputStream.read(&buf); While &byteCount > 0 &out.write(&buf, 0, &byteCount); &byteCount = &zipInputStream.read(&buf); End-While; &zipInputStream.closeEntry(); End-If; &zipEntry = &zipInputStream.getNextEntry(); End-While; &zipInputStream.close(); &zipFileInputStream.close(); End-Function; unzip("/tmp/myzipfile.zip", "/tmp/out");
Great.. but I Think that there is a Little error in the follow line:
(“java.io.<File",
I try to test at peopleTools 8.49…
Jose,
Thanks for pointing that out. I think that I have that fixed.
Thanks,
Stephen
One more Update to the above code..we need to close the output files as well..
&out.close();