2010-04-19 5 views
0

En fait, je suis confronté à un problème. J'ai un fichier ".apk" dans un paquet de mon application. apk est une sorte de fichier jar (apk = paquet Android). Je veux maintenant copier ce fichier jar hors de mon programme sur n'importe quel autre emplacement sur le PC. Normalement, je le faire en utilisant:Java - copy Jar Dossier

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

Et puis écrire sur le disque avec l'aide d'un FileOutputStream. ... mais comme un .apk est une sorte de .jar, cela ne fonctionne pas. Il copie juste le fichier .apk. mais sans les autres fichiers contenant.

toute aide serait appréciée

Répondre

1

Depuis .apk est un fichier .jar par un autre nom (en d'autres termes, il est un fichier zip avec quelques définitions spécifiques où les fichiers de configuration sont stockés dans le répertoire) puis regardez ZipInputStream à lisez le fichier et parcourez le contenu et écrivez-les sous forme de fichiers.

0

Merci beaucoup Yishai ... ce fut le Conseil que j'attendais :) Probablement est sb là-bas, qui a besoin de faire une même chose, donc ... voici mon code:

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