Heim >Java >javaLernprogramm >Wie vermeide ich unerwartete Probleme beim Erstellen von JAR-Dateien mit Javas JarOutputStream?

Wie vermeide ich unerwartete Probleme beim Erstellen von JAR-Dateien mit Javas JarOutputStream?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 11:23:02859Durchsuche

How to Avoid Unexpected Issues While Creating JAR Files with Java's JarOutputStream?

Fehlerbehebung bei JarOutputStream für die JAR-Dateierstellung

Das programmgesteuerte Erstellen von JAR-Dateien mit java.util.jar.JarOutputStream kann unkompliziert erscheinen, aber bestimmte Nuancen können zu unerwarteten Problemen führen. Dieser Artikel untersucht diese undokumentierten Macken und bietet eine umfassende Lösung zum Erstellen gültiger JAR-Dateien.

Die Macken verstehen

Bei der Verwendung von JarOutputStream ist es wichtig, die folgenden undokumentierten Regeln einzuhalten:

  • Verzeichnisnamen müssen mit einem „/“-Schrägstrich enden.
  • Pfade sollten „/“-Schrägstriche verwenden, nicht „“.
  • Einträge dürfen nicht mit einem „/“-Schrägstrich beginnen.

Implementierung des richtigen Ansatzes

Hier ist ein detailliertes Beispiel, wie man eine JAR-Datei mit einer Manifestdatei erstellt und die oben genannten Macken behebt:

<code class="java">public void run() throws IOException {
    // Prepare the manifest file
    Manifest manifest = new Manifest();
    manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");

    // Create a new JAROutputStream with the manifest
    JarOutputStream target = new JarOutputStream(new FileOutputStream("output.jar"), manifest);

    // Iterate over the source directory and add files to the JAR
    add(new File("inputDirectory"), target);

    // Close the JAROutputStream
    target.close();
}

private void add(File source, JarOutputStream target) throws IOException {
    // Prepare the entry path
    String name = source.getPath().replace("\", "/");

    // Handle directories
    if (source.isDirectory()) {
        if (!name.endsWith("/")) {
            name += "/";
        }
        // Create a directory entry with appropriate timestamps
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        target.closeEntry();

        // Recursively add files within the directory
        for (File nestedFile : source.listFiles()) {
            add(nestedFile, target);
        }
    } 
    // Handle files
    else {
        // Create a file entry with appropriate timestamps
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);

        // Read and write the file contents to the JAR
        try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(source))) {
            byte[] buffer = new byte[1024];
            while (true) {
                int count = in.read(buffer);
                if (count == -1)
                    break;
                target.write(buffer, 0, count);
            }
            target.closeEntry();
        }
    }
}</code>

Von Wenn Sie diese Richtlinien befolgen, können Sie jetzt sicher gültige JAR-Dateien programmgesteuert erstellen und so sicherstellen, dass auf Bibliotheken und andere darin enthaltene Ressourcen wie vorgesehen zugegriffen werden kann.

Das obige ist der detaillierte Inhalt vonWie vermeide ich unerwartete Probleme beim Erstellen von JAR-Dateien mit Javas JarOutputStream?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn