2

私は PhoneGap/Cordova を使用して、後で表示するためにコンテンツをローカル ファイル システムにダウンロードするアプリを作成しました。これは、Cordova ライブラリを使用してファイル システムにアクセスし、ファイルを転送します。

一部のデータは zip アーカイブの形式で提供されるため、コンテンツを解凍する必要があります。

Cordova には ZIP ファイルを抽出するための標準プラグインはありませんが、既に使用していた iOS 用の既存のプラグインを使用し、同じインターフェイスを維持して、BB プラットフォーム用の ZipME をラップする Java で再実装しました。

私の問題は、ファイルにアクセスして解凍しようとすると、「ファイルが見つかりません」という例外がスローされることです。

これはコードです:

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 OS を実行する 9800 と 9810 のシミュレータです。

4

0 に答える 0