„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie vermeidet man undokumentierte Macken, wenn Sie JaroutputStream verwenden, um JAR -Dateien zu erstellen?

Wie vermeidet man undokumentierte Macken, wenn Sie JaroutputStream verwenden, um JAR -Dateien zu erstellen?

Veröffentlicht am 2025-01-27
Durchsuche:441

How to Avoid Undocumented Quirks When Using JarOutputStream to Create JAR Files?

Erstellen von JAR-Dateien mit JarOutputStream

Um eine JAR-Datei programmgesteuert zu generieren, wird häufig JarOutputStream verwendet. Es ist jedoch wichtig, bestimmte undokumentierte Macken in JarOutputStream:

1 zu vermeiden. Verzeichnisse, die mit einem Schrägstrich enden:

Verzeichnisnamen in JAR-Dateien müssen mit einem Schrägstrich „/“ enden.

2. Pfade mit Schrägstrichen:

Verwenden Sie Schrägstriche „/“ in Pfaden, im Gegensatz zu Backslashes „\“.

3. Keine führenden Schrägstriche in Eintragsnamen:

Eintragsnamen sollten nicht mit einem Schrägstrich „/“ beginnen.

Beispielcode mit Korrekturen:

Der folgende korrigierte Code erstellt eine gültige JAR-Datei mit einer Manifestdatei:

public void run() throws IOException {
    Manifest manifest = new Manifest();
    manifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
    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);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        target.closeEntry();
        for (File nestedFile : source.listFiles()) {
            add(nestedFile, target);
        }
    } else {
        JarEntry entry = new JarEntry(name);
        entry.setTime(source.lastModified());
        target.putNextEntry(entry);
        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();
        }
    }
}
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3