tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
1956
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    stEEdZ stEEdZ ist offline Mitglied Silber
    Registriert seit
    Jun 2007
    Beiträge
    71
    Hallo allerseits,
    ich habe in einem Jar File ein Zip/Jar - File und will dieses einfach auf meine Festplatte entpacken.

    Durch Hilfe verschiedener Threads konnte ich mir auch etwas zusammen basteln.
    Ich habe auch das Gefühl dass ich nur einen kleinen Schritt von der Lösung entfernt bin, dennoch funktioniert das Skript leider so noch nicht ganz.

    Ich wäre sehr froh wenn mal jemand drüber schauen und mir meine Fehler aufzeigen könnte.

    PHP-Code:
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.util.Enumeration;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipFile;
    import java.util.zip.ZipInputStream;

    public class 
    ZipArchiveExtractor {

        
    /**
         * @param args
         */
        
        

        
    public void extractArchive(InputStream archiveFile destDirthrows Exception {
            if (!
    destDir.exists()) {
                
    destDir.mkdir();
            }

            
    ZipInputStream quelle = new ZipInputStream(archive);
            

            
    byte[] buffer = new byte[16384];
            
    int len;
            while (
    true) {
                
    ZipEntry entries quelle.getNextEntry();

                
    String entryFileName entries.getName();

                
    File dir buildDirectoryHierarchyFor(entryFileNamedestDir);
                if (!
    dir.exists()) {
                    
    dir.mkdirs();
                }

                if (!
    entries.isDirectory()) {
                    
    BufferedOutputStream bos = new BufferedOutputStream(
                            new 
    FileOutputStream(new File(destDirentryFileName)));

                    
    BufferedInputStream bis = new BufferedInputStream(quelle);

                    while ((
    len bis.read(buffer)) > 0) {
                        
    bos.write(buffer0len);
                    }

                    
    bos.flush();
                    
    bos.close();
                    
    bis.close();
                }
            }
        }

        private 
    File buildDirectoryHierarchyFor(String entryNameFile destDir) {
            
    int lastIndex entryName.lastIndexOf('/');
            
    String entryFileName entryName.substring(lastIndex 1);
            
    String internalPathToEntry entryName.substring(0lastIndex 1);
            return new 
    File(destDirinternalPathToEntry);
        }
        
        
        
        public static 
    void main(String[] argsString paththrows Exception {
            
    InputStream quelle ZipArchiveExtractor.class.getResourceAsStream("Script.jar");
            new 
    ZipArchiveExtractor().extractArchive(quelle, new File(
                    
    "c:/SCRIPT"));
        }

    vielen Dank für die Hilfe
    steedz
    Geändert von stEEdZ (24.08.08 um 12:25 Uhr)
     

  2. #2
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.960
    Vielleicht schreibst du noch was nicht so richtig funktioniert?
     

  3. #3
    stEEdZ stEEdZ ist offline Mitglied Silber
    Registriert seit
    Jun 2007
    Beiträge
    71
    Hallo,
    die Grundlage dieses Skriptes ist aus einer Vorgabe hier aus dem Forum! hier
    Allerdings wird hier aus einem Zip von einer Vorgegebenen Pfad ausgelesen, was bei mir in einem ausgeführten Jar wäre! Ansonsten klappt das aber super!

    Ich vermute dass der/die Fehler entweder im Aufruf des Jar-Files aus dem ausgeführten Jar stecken...
    Code :
    1
    
    InputStream quelle = ZipArchiveExtractor.class.getResourceAsStream("Script.jar");

    Oder dass die Umwandlung von InputStream in main hinzu ZipInputStream in der Funktion einfach nicht stimmt...
    Code :
    1
    2
    3
    4
    
     public void extractArchive(InputStream archive, File destDir) throws Exception { 
    //...
    //...
     ZipInputStream quelle = new ZipInputStream(archive);

    Oder dass bei "BufferedInputStream " die Variable "quelle" eine andere sein müsste?
    Code :
    1
    
    BufferedInputStream bis = new BufferedInputStream(quelle);

    Leider bin ich mit java noch sehr unerfahren da ich erst vor 2 Wochen auf diese Sprache umgestiegen bin!
    Die Fehler könnten sich also auch ganz wo anders verstecken

    Danke für die Hilfe
    steedz
    Geändert von stEEdZ (26.08.08 um 12:11 Uhr)
     

  4. #4
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.960
    Ich wollte nicht wissen wo du meinst dass der Fehler ist, sondern wie sich dieser bemerkbar macht. Bekommst du eine Fehlermeldung oder wird einfach nichts entpackt? Irgendwie mußt du ja zu dem Schluß gekommen sein dass es nicht richtig funktioniert.
     

  5. #5
    stEEdZ stEEdZ ist offline Mitglied Silber
    Registriert seit
    Jun 2007
    Beiträge
    71
    Es entpackt einfach nicht!
    Problem ist natürlich dass ich ja ein JarFile ausführen muss um überhaupt auf das andere jar zugreifen zu können, dementsprechend seh ich auch kein Exceptionhandling weil ja keine Konsole mitläuft...

    Danke
     

  6. #6
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.960
    Dann starte doch dein Jar in dem du in der Konsole in den Ordner des Jar wechselst und dann
    java -jar deinjar.jar
    eingibst.

    Dann siehst du auch alles.
     

  7. #7
    stEEdZ stEEdZ ist offline Mitglied Silber
    Registriert seit
    Jun 2007
    Beiträge
    71
    Ok, danke für den Tip!
    Für die meisten Leute wahrscheinlich sehr trivial aber mir war das tatsächlich nicht klar, wie ich die Nachrichten anschauen kann

    So nun zurück zum Thema...
    Also ich bekomm die Exceptions:

    java.lang.NullPointerException: in is null
    at java.util.zip.ZipInputStream.<init>(ZipInputStream.java:56)
    at ZipArchiveExtractor.extractArchive(ZipArchiveExtractor.java:26)
    at ZipArchiveExtractor.main(ZipArchiveExtractor.java:69)
    at Main.main(Main.java:17)

    Danke für die Hilfe
    steedz
     

  8. #8
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.960
    Wo liegt denn dein Jar und wo das Jar welches du entpacken möchtest?
     

  9. #9
    stEEdZ stEEdZ ist offline Mitglied Silber
    Registriert seit
    Jun 2007
    Beiträge
    71
    Hallo,
    also das jar liegt wegen mir auf C: (das is ja relativ unrelevant oder?)
    Das Jar das ich quasi entpacken will liegt ganz normal im jar-file, also mein build sieht im Prinzip so aus:

    >...jdk1.6.0_07/bin/jar.exe -cfmv0 meinJar.jar Manifest.txt Main.class extractJarFile.class UNZIPME.jar

    UNZIPME.jar will ich quasi auspacken und auf Festplatte schupsen! (im Code is das Skript.jar)

    Danke für die Hilfe
    steedz
     

  10. #10
    Avatar von zeja
    zeja zeja ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2006
    Beiträge
    2.960
    Code java:
    1
    
    ZipArchiveExtractor.class.getResourceAsStream("Script.jar");

    Wenn du das so schreibst, muss das Script.jar innerhalb deines Jars im selben Ordner wie die Klasse ZipArchiveExtractor liegen. Ist das der Fall? In Jars kann man ja mit jedem Zip-Tool reinschauen.
     

  11. #11
    stEEdZ stEEdZ ist offline Mitglied Silber
    Registriert seit
    Jun 2007
    Beiträge
    71
    Hallo,
    entschuldige dass ich nicht früher zurückschreiben konnte, ich war im Urlaub!

    Also ein kleines Problem besteht leider immernoch...

    Das Jar-File wird entpackt!
    Jedoch nur wenn ich das hier auskommentiere:

    PHP-Code:
    //                while ((len = bis.read(buffer)) > 0) {
    //                    bos.write(buffer, 0, len);
    //                }
    //
    //                bos.flush();
    //                bos.close();
    //                bis.close(); 
    Dann erhalte ich zwar folgende Fehlermeldungen aber die Files werden entpackt!
    Code :
    1
    2
    3
    
    Exception in thread "main" java.lang.NullPointerException
        at install.file.ZipArchiveExtractor.extractArchive(ZipArchiveExtractor.java:30)
        at install.file.ZipArchiveExtractor.main(ZipArchiveExtractor.java:63)

    Wie ist das zu erklären?
    Was für Probleme entstehen wenn ich die Fehlermeldungen einfach missachte?

    Danke für die Hilfe
    steedz
    Geändert von stEEdZ (03.09.08 um 17:21 Uhr)
     

Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 26.12.10, 21:04
  2. Zip-file downloaden und entpacken
    Von Paspirgilis im Forum PHP
    Antworten: 5
    Letzter Beitrag: 23.02.10, 19:06
  3. Jar File auf anderem Computer starten
    Von Floffy im Forum Java
    Antworten: 10
    Letzter Beitrag: 27.08.08, 13:42
  4. Wie cmd auf einem anderem Computer starten?
    Von partitionist im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 19.07.07, 14:16
  5. gz-file entpacken (PHP)?
    Von PCUser1 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 03.07.02, 15:54