我使用 PhoneGap/Cordova 编写了一个应用程序,它将内容下载到本地文件系统以供以后查看,它使用 Cordova 库来访问文件系统和传输文件。
一些数据以 zip 存档的形式出现,因此我需要解压缩内容。
Cordova 中没有用于提取 ZIP 文件的标准插件,但我采用了我们已经在使用的现有 iOS 插件,保持相同的界面,并在 Java 包装 ZipME 中为 BB 平台重新实现。
我的问题是,然后我尝试访问我的文件以解压缩它,我得到一个“找不到文件”异常被抛出。
这是代码:
public void extract(String sourceFile, String targetDirectory) throws IOException {
byte[] buff = new byte[1024];
InputStream inStream = null;
OutputStream outStream = null;
try {
FileConnection fcIn = (FileConnection) Connector.open(sourceFile, Connector.READ_WRITE);
FileConnection fcOut;
inStream = fcIn.openInputStream();
ZipInputStream zipIS = new ZipInputStream(inStream);
ZipEntry zipEntry = zipIS.getNextEntry();
while (zipEntry != null) {
String fileName = zipEntry.getName();
fcOut = (FileConnection) Connector.open(targetDirectory + fileName, Connector.READ_WRITE);
outStream = fcOut.openOutputStream();
int readLength;
while ((readLength = inStream.read(buff)) > 0) {
outStream.write(buff, 0, readLength);
}
outStream.flush();
outStream.close();
zipEntry = zipIS.getNextEntry();
}
} catch (RuntimeException e) {
Logger.error(TAG + "Unzip failed: " + e.getMessage());
throw new ZipException("Unable to unzip file: " + e.getMessage());
} finally {
// Cleanup code
if (inStream != null) {
inStream.close();
}
if (outStream != null) {
outStream.close();
}
}
}
调试确认我传入了以下参数:
源文件:file:///SDCard/downloadable/B3/B3.zip 目标目录:file:///SDCard/downloadable/B3/
在测试设备上检查 SD 卡,并在模拟器上查看合成 SD 卡都确认以下文件结构:
root
- BlackBerry
- Etc
- temp
- downloadable
- B1
- B2
- B2.zip
- B3
- B3.zip
- B4
- B5
- B6
我在 BB 7.0 和 7.1 上运行测试,Cordova 是 V2.3.0,测试设备是 9800、9810,以及运行 BB 7.0 或 7.1 操作系统的 9800 和 9810 模拟器。