jar entpacken

cybermog

Aktives Mitglied
Wie kann ich folgende Klasse in meinem Programm nutzen ?

Java:
 import java.io.*;
import java.util.*;
import java.util.jar.*;

public class JarExtract {

public  static void main(String[] args) throws IOException {

// Get the jar name and the entry name.
String jarName = args[0];
String entryName = args[1];
// Open the jar.
JarFile jar = new JarFile(jarName);
try {
    // Get the entry and its input stream.
    JarEntry entry = jar.getJarEntry(entryName);
    // If the entry is not null, extract it. Otherwise, print a
    // message.
    if (entry != null) {
        // Get an input stream for the entry.
        InputStream entryStream = jar.getInputStream(entry);
        try {
            // Create the output file (clobbering the file if it exists).
            FileOutputStream file = new FileOutputStream(entry.getName());
            try {
                // Allocate a buffer for reading the entry data.
                byte[] buffer = new byte[1024];
                int bytesRead;
                // Read the entry data and write it to the output file.
                while ((bytesRead = entryStream.read(buffer)) != -1) {
                    file.write(buffer, 0, bytesRead);
                    }
                } finally { file.close(); }
            } finally { entryStream.close(); }
        } else { } // end if
    } finally { jar.close(); }
}
}
 
M

MiDniGG

Gast
STRG+A
STRG+C
STRG+V

oder die ganze Klasse in das Projekt kopieren.
Oder die JAR einbinden, die die Klasse enthält.

Edit: Oh. Ist ja alles in der main-Methode... Dann am Besten den Inhalt aus der Main kopieren und bei Dir einfügen...
Natürlich nur, soweit das auch rechtlich in Ordnung geht! ;-)
 

nrg

Top Contributor
wenn du das Programm einfach so ausführen willst, machst du das über die Argumente beim Start:

javac JarExtract.java
java JarExtract deinJarName deinJarEntry

Wenn du es umschreiben willst, sodass das Ganze als Methode ausführbar ist, musst du einfach die Argumente als Parameter umschreiben:

Java:
public  static void extractJarFile(String jarName, String entryName) throws IOException {
     // Open the jar.
     JarFile jar = new JarFile(jarName);
     // ......
 

cybermog

Aktives Mitglied
Wie rufe ich das in meinem Programm auf ? Die Zeile erzeugt einen Fehler: cannot find symbol. symbol: method extractJarFile(java.lang.String).

Java:
extractJarFile(string);
 

Michael...

Top Contributor
Es gibt keine Methode extractJarFile in dem obigen Code.
--> Du musst die Methode definieren.
Kopiere doch den Code aus der main in eine Methode Deiner Klassen.
 

Michael...

Top Contributor
entryName ist der Bezeichner für eine Variable vom Typ String.

Im konkreten Fall wird hier der String referenziert, der den Namen des Eintrags enthält, der aus dem jar extrahiert werden soll.
 

cybermog

Aktives Mitglied
Die Methode extrahiert also immer nur eine Datei aus dem Archiv. Dann muss eine Schleife her, die den Inhalt durchläuft ? Wie kommt man zu den entrys ?
 

cybermog

Aktives Mitglied
Java:
 public  static void extractJarFile(String jarName, String entryName) throws IOException {
    // Open the jar.
    JarFile jar = new JarFile(jarName);
    try {
        // Get the entry and its input stream.
        JarEntry entry = jar.getJarEntry(entryName);
        // If the entry is not null, extract it. Otherwise, print a
        // message.
        if (entry != null) {
            // Get an input stream for the entry.
            InputStream entryStream = jar.getInputStream(entry);
            try {
                // Create the output file (clobbering the file if it exists).
                FileOutputStream file = new FileOutputStream("tmp/"+entry.getName());
                try {
                    // Allocate a buffer for reading the entry data.
                    byte[] buffer = new byte[1024];
                    int bytesRead;
                    // Read the entry data and write it to the output file.
                    while ((bytesRead = entryStream.read(buffer)) != -1) {
                        file.write(buffer, 0, bytesRead);
                        }
                    } finally { file.close(); }
                } finally { entryStream.close(); }
            } else { } // end if
        } finally { jar.close(); }
}

Java:
File ordner = new File("tmp");
            ordner.mkdirs();
            JarFile jarFile = new JarFile(new File(jarFileTextField.getText()));
            for (Enumeration entries = jarFile.entries(); entries.hasMoreElements();) {
                 JarEntry entry = (JarEntry) entries.nextElement();
                 if (entry != null && entry.isDirectory()) {
                     File dirFile = new File("tmp/"+entry.getName());
                     dirFile.mkdirs();
                    }
                else if(entry != null)
                     extractJarFile(jarFileTextField.getText(), entry.getName());
            }

z.B. so.
 
Zuletzt bearbeitet:

Ähnliche Java Themen


Oben