Java - копия папки Jar - PullRequest
       5

Java - копия папки Jar

0 голосов
/ 19 апреля 2010

На самом деле я столкнулся с проблемой. У меня есть «.apk-файл» в одном пакете моего приложения. apk - это разновидность jar-файла (apk = Android Package). Теперь я хочу скопировать этот jar-файл из моей Программы в любое другое место на ПК. Обычно я бы сделал это с помощью:

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

А затем записать его на диск с помощью FileOutputStream. ... но, так как .apk - это своего рода .jar, он не работает. Он просто копирует файл .apk. но без содержания других файлов.

любая помощь будет оценена

Ответы [ 2 ]

1 голос
/ 19 апреля 2010

Поскольку .apk - это файл .jar с другим именем (другими словами, это zip-файл с некоторыми конкретными определениями того, где файлы конфигурации хранятся в каталоге), тогда посмотрите на ZipInputStream , чтобы прочитайте файл, просмотрите содержимое и запишите их в виде файлов.

0 голосов
/ 20 апреля 2010

Большое спасибо Ишай ... это был намек, которого я ждал :) Вероятно, есть кто-то, кто хочет сделать то же самое, поэтому ... вот мой код:

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