0

実際、私は問題に直面しています。アプリケーションの 1 つのパッケージに「.apk ファイル」があります。apk は jar ファイル (apk = Android Package) の一種です。このjarファイルをプログラムからPCの他の場所にコピーしたいと思います。通常、次を使用してこれを行います。

FileInputStream is = new FileInputStream(this.getClass().getResource("/resources/myApp.apk").getFile());

そして、FileOutputStream を使用してディスクに書き込みます。...しかし、.apk は一種の .jar であるため、機能しません。.apk ファイルをコピーするだけです。ただし、含まれている他のファイルはありません。

任意の助けをいただければ幸いです

4

2 に答える 2

1

.apk.jar別の名前のファイルであるため (つまり、構成ファイルがディレクトリ内に保存されている場所の特定の定義を含む zip ファイルです)、ZipInputStream を調べてファイルを読み取り、内容を確認してファイルとして書き出します。

于 2010-04-19T19:12:20.217 に答える
0

本当にありがとうYishai...これは私が待っていたヒントでした:)おそらくそこにsbがあり、同じことをする必要があるので...ここに私のコードがあります:

public static boolean copyApkFile(File outputFile){
        try {
            FileInputStream fis = new FileInputStream(this.getClass().getResource("/resources/myApkFile.apk").getFile());
            ZipInputStream zis = new ZipInputStream(fis);
            FileOutputStream fos = new FileOutputStream(outputFile));
            ZipOutputStream zos = new ZipOutputStream(fos);
            ZipEntry ze = null;
            byte[] buf = new byte[1024];
            while ((ze = zis.getNextEntry()) != null) {
                System.out.println("Next entry "+ze.getName()+" "+ze.getSize());
                zos.putNextEntry(ze);
                int len;
                while ((len = zis.read(buf)) > 0) {
                  zos.write(buf, 0, len);
                }
            }
            zos.close();
            fos.close();
            zis.close();
            fis.close();
            return true;
        } catch (IOException ex) {
            Logger.getLogger(SetUpNewDevice.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }
于 2010-04-19T20:41:08.543 に答える