Décompresser un dossier et sélectionnez un dossier particulier et zip à nouveau il

Mohit Saini:

Je un dossier compressé (ex test.zip), qui a la structure suivante lorsque je it- décompresser

WebContent/config/somefiles
WebContent/css/somefile
Webcontent/fonts/somefiles
Webcontent/js/somefiles
WebContent/index.html

Maintenant , je dois enlever WebContent de cette structure. Mon fichier final Décompressez devrait avoir config, css,jset index.htmlà l' emplacement racine.

S'il vous plaît laissez-moi savoir un code efficace JAVA pour le poing Décompressez test.zip contournent le dossier WebContent et zip à nouveau tous les fichiers présents dans WebContent.

Merci d'avance!

Thomas Bitonti:

Ceci est un modèle / activité commune, donc un bon d'avoir dans votre trousse d'outils.

Voir le code ci-dessous. Il existe une méthode « select », qui est pour vous de personnaliser selon les besoins à la sélection d'entraînement des entrées qui sont ou ne sont pas à transférer:

private static boolean select(String entryName) {
    return true; // Customize me
}

Notez qu'un répertoire peut avoir une entrée pour le répertoire lui-même (par exemple, « méta-inf / », ainsi que les entrées pour les fichiers dans le répertoire (par exemple, « méta-inf / manifest.mf »). Sauter le répertoire l'entrée ne sera pas sauter les entrées dans le répertoire.

A noter également, ce qui évite tout dézipper sur le disque. C'est à éviter, car il ajoute beaucoup au temps d'exécution. (Mais attention aussi que les entrées entières ne sont pas chargées dans la mémoire, une seule bufferfull des données est toujours en mémoire.)

En supposant que le code est « transfer.jar », l'utilisation est:

Utilisation: sample.transfer.TransferSample InputPath OutputPath

Par exemple, l'exécution de l'outil sur son propre pot:

java -classpath transfer.jar sample.transfer.TransferSample transfer.jar transfer.jar.out

Transfer from [ transfer.jar ]
Transfer to [ transfer.jar.out ]
Transfer from [ c:\dev\transfer\transfer.jar ] (absolute path)
Transfer to [ c:\dev\transfer\transfer.jar.out ] (absolute path)
Entry [ META-INF/MANIFEST.MF ]: Selected
Transferred [ 25 ] bytes
Entry [ sample/ ]: Selected
Entry [ sample/transfer/ ]: Selected
Entry [ sample/transfer/TransferSample.class ]: Selected
Transferred [ 4061 ] bytes
Entry [ sample/transfer/TransferSample.java ]: Selected
Transferred [ 3320 ] bytes
Transfer Success

Voici le code:

package sample.transfer;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class TransferSample {

    public static void main(String args[]) {
        if ( args.length < 2 ) {
            System.out.println("Usage: " + TransferSample.class.getName() + " inputPath outputPath");
            return;
        }

        String inputPath = args[0];
        String outputPath = args[1];

        System.out.println("Transfer from [ " + inputPath + " ]");
        System.out.println("Transfer to [ " + outputPath + " ]");

        File inputFile = new File(inputPath);
        File outputFile = new File(outputPath);

        System.out.println("Transfer from [ " + inputFile.getAbsolutePath() + " ] (absolute path)");
        System.out.println("Transfer to [ " + outputFile.getAbsolutePath() + " ] (absolute path)");

        try ( InputStream inputStream = new FileInputStream(inputFile) ) { // throws IOException
            try ( OutputStream outputStream = new FileOutputStream(outputFile) ) { // throws IOException
                transfer(inputStream, outputStream);
                System.out.println("Transfer Success");
            }
        } catch ( IOException e ) {
            System.err.println("Transfer Failure");
            e.printStackTrace(System.err);
        }
    }

    // All static to keep the code simpler.

    public static void transfer(InputStream inputStream, OutputStream outputStream) throws IOException {
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
        try {
            transfer(zipInputStream, zipOutputStream); // throws IOException
        } finally {
            zipOutputStream.finish(); // throws IOException
        }
    }

    private static final int BUFFER_SIZE = 64 * 1024;

    private static boolean select(String entryName) {
        return true; // Customize me
    }

    public static void transfer(ZipInputStream zipInputStream, ZipOutputStream zipOutputStream) throws IOException {
        byte[] buffer = new byte[BUFFER_SIZE]; // Single buffer for all transfers

        ZipEntry inputEntry;
        while ( (inputEntry = zipInputStream.getNextEntry()) != null ) {
            String entryName = inputEntry.getName();

            if ( !select(entryName) ) {
                System.out.println("Entry [ " + entryName + " ]: Not selected");
                continue;
            } else {
                System.out.println("Entry [ " + entryName + " ]: Selected");
            }

            zipOutputStream.putNextEntry(inputEntry); // throws IOException

            if ( !inputEntry.isDirectory() ) {
                long bytesTransferred = transfer(zipInputStream, zipOutputStream, buffer); // throws IOException
                System.out.println("Transferred [ " + bytesTransferred + " ] bytes");

                zipOutputStream.closeEntry(); // throws IOException
            }
        }
    }

    private static long transfer(InputStream inputStream, OutputStream outputStream, byte[] buffer) throws IOException {
        long totalBytesRead = 0L;

        int bytesRead = 0;
        while ( (bytesRead = inputStream.read(buffer, 0, buffer.length)) != -1 ) { // throws IOEXception
            totalBytesRead += bytesRead;
            outputStream.write(buffer, 0, bytesRead);
        }

        return totalBytesRead;
    }
}

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=400917&siteId=1
conseillé
Classement