Maison > Java > javaDidacticiel > Comment éviter les problèmes inattendus lors de la création de fichiers JAR avec JarOutputStream de Java ?

Comment éviter les problèmes inattendus lors de la création de fichiers JAR avec JarOutputStream de Java ?

Mary-Kate Olsen
Libérer: 2024-10-29 11:23:02
original
859 Les gens l'ont consulté

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

Dépannage de JarOutputStream pour la création de fichiers JAR

La création de fichiers JAR par programme à l'aide de java.util.jar.JarOutputStream peut sembler simple, mais certaines nuances peuvent entraîner des problèmes inattendus. Cet article explore ces bizarreries non documentées et fournit une solution complète pour créer des fichiers JAR valides.

Comprendre les bizarreries

Lors de l'utilisation de JarOutputStream, il est crucial de respecter les règles non documentées suivantes :

  • Les noms de répertoires doivent se terminer par une barre oblique '/'.
  • Les chemins doivent utiliser des barres obliques '/' et non ''.
  • Les entrées ne peuvent pas commencer par une barre oblique '/'.

Mise en œuvre de l'approche correcte

Voici un exemple détaillé de la façon de créer un fichier JAR avec un fichier manifeste, répondant aux bizarreries susmentionnées :

<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>
Copier après la connexion

Par en suivant ces directives, vous pouvez désormais créer en toute confiance des fichiers JAR valides par programme, en garantissant que les bibliothèques et autres ressources qu'ils contiennent sont accessibles 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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal