Maison > Java > javaDidacticiel > Comment éviter les bizarreries non documentées lors de l'utilisation de JarOutputStream pour créer des fichiers JAR ?

Comment éviter les bizarreries non documentées lors de l'utilisation de JarOutputStream pour créer des fichiers JAR ?

Susan Sarandon
Libérer: 2024-10-30 08:00:27
original
399 Les gens l'ont consulté

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

Création de fichiers JAR à l'aide de JarOutputStream

Pour générer un fichier JAR par programme, JarOutputStream est souvent utilisé. Cependant, il est essentiel d'éviter certaines bizarreries non documentées au sein de JarOutputStream :

1. Répertoires se terminant par une barre oblique :

Les noms de répertoires dans les fichiers JAR doivent se terminer par une barre oblique « / ».

2. Chemins utilisant des barres obliques :

Utilisez des barres obliques '/' dans les chemins, par opposition aux barres obliques inverses ''.

3. Pas de barre oblique dans les noms d'entrée :

Les noms d'entrée ne doivent pas commencer par une barre oblique « / ».

Exemple de code avec corrections :

Le code corrigé suivant construit un fichier JAR valide avec un fichier manifeste :

<code class="java">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();
        }
    }
}</code>
Copier après la connexion

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal