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,js
et 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!
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;
}
}