Heim  >  Artikel  >  Java  >  Wie vermeide ich versteckte Macken beim Erstellen von JAR-Dateien mit JarOutputStream?

Wie vermeide ich versteckte Macken beim Erstellen von JAR-Dateien mit JarOutputStream?

Linda Hamilton
Linda HamiltonOriginal
2024-11-02 10:59:30948Durchsuche

How to Avoid Hidden Quirks When Creating JAR Files with JarOutputStream?

Erstellen von JAR-Dateien mit JarOutputStream: Fehlerbehebung bei versteckten Macken

Obwohl das JarOutputStream-Dienstprogramm für die programmgesteuerte Erstellung von JAR-Dateien einfach zu sein scheint, birgt es mehrere undokumentierte Macken Dies kann die Integrität der generierten Archive gefährden. Diese Macken manifestieren sich in drei spezifischen Bereichen:

  • Verzeichnisnamen erfordern ein abschließendes /, um sicherzustellen, dass sie als bekannte Verzeichnisse innerhalb der JAR enden.
  • Pfadtrennzeichen müssen durch / und nicht durch das gekennzeichnet werden plattformspezifisch .
  • Einträge dürfen nicht mit einem / beginnen Schrägstrich.

Um eine ordnungsgemäße JAR-Erstellung sicherzustellen, halten Sie sich an die folgenden Richtlinien:

<code class="java">public void run() throws IOException {
    Manifest manifest = new Manifest();
    // ... (populate manifest)

    JarOutputStream target = new JarOutputStream(
        new FileOutputStream("output.jar"),
        manifest
    );

    add(new File("inputDirectory"), target);
    target.close();
}

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

    if (source.isDirectory()) {
        if (!name.endsWith("/")) {
            name += "/";
        }

        JarEntry entry = new JarEntry(name);
        // ... (set entry properties)

        target.putNextEntry(entry);
        target.closeEntry();

        for (File nestedFile : source.listFiles()) {
            add(nestedFile, target);
        }
    } else {
        JarEntry entry = new JarEntry(name);
        // ... (set entry properties)

        target.putNextEntry(entry);
        try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(source))) {
            // ... (write file to JAR entry)
        }

        target.closeEntry();
    }
}</code>

Durch die Einhaltung dieser Richtlinien können Sie JAR-Dateien genau erstellen, die extrahiert werden und als solche funktionieren beabsichtigt.

Das obige ist der detaillierte Inhalt vonWie vermeide ich versteckte Macken beim Erstellen von JAR-Dateien mit 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