Maison >Java >javaDidacticiel >Comment éviter les bizarreries cachées lors de la création de fichiers JAR avec JarOutputStream ?

Comment éviter les bizarreries cachées lors de la création de fichiers JAR avec JarOutputStream ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-02 10:59:301042parcourir

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

Création de fichiers JAR avec JarOutputStream : dépannage des bizarreries cachées

Bien que l'utilitaire JarOutputStream semble simple pour créer des fichiers JAR par programme, il recèle plusieurs bizarreries non documentées qui peut compromettre l’intégrité des archives générées. Ces bizarreries se manifestent dans trois domaines spécifiques :

  • Les noms de répertoires nécessitent un / final, garantissant qu'ils se terminent par des répertoires connus dans le JAR.
  • Les séparateurs de chemin doivent être désignés par /, et non par le spécifique à la plate-forme.
  • Les entrées ne doivent pas commencer par une barre oblique /.

Pour garantir une création correcte du JAR, respectez les directives suivantes :

<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>

Par en adhérant à ces directives, vous pouvez créer avec précision des fichiers JAR qui seront extraits et fonctionneront comme prévu.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn