Ir al contenido principal

Quiéres estos diseños en tu ropa o en diferentes productos?

Publicidad

Extraer archivos comprimidos en zip usando Java y JavaFX

Nuevamente un saludo a todos!, hoy les traigo una nueva mini aplicación usando Java y JavaFX, es un extractor de archivos comprimidos en zip, esta mini aplicación nos permitirá leer el archivo zip, ver su contenido y extraerlo en la carpeta deseada. como ya lo he dicho en una entrada anterior no es a prueba de errores, solo les muestro la aplicación básica y funcional si desean mejorarla ya queda de su parte.

Bien veamos el código de hoy:

ZipUI.java

public class ZipUI extends Application{
private ZipFile zipFile;
private TextArea contentView;
private Stage mainStage;
private TextField filePath;
 
public static void main(String[] args) {
    launch(args);
}
public void start(Stage stage){
    mainStage = stage; zipFile = null;
    VBox root = new VBox();
    contentView = new TextArea();
    filePath = new TextField();
    Button openButton = new Button("Abrir");
    Button extractButton = new Button("Extraer");
    root.setPadding(new Insets(5,5,5,5));
    root.setFillWidth(true);
    contentView.setEditable(false);
    contentView.setPrefHeight(500);
    filePath.setPrefWidth(500);
    HBox hbox = new HBox();
    hbox.setSpacing(5);
    hbox.setPadding(new Insets(5,0,5,0));
    hbox.getChildren().add(filePath);
    hbox.getChildren().add(openButton);
    hbox.getChildren().add(extractButton);
    root.getChildren().add(hbox);
    root.getChildren().add(contentView);
    openButton.setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent arg0) {
            if(zipFile != null){
                try {
                    zipFile.close();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
            filePath.clear();
            contentView.clear();
            FileChooser chooser = new FileChooser();
            chooser.setTitle("Selecciona un archivo zip");
            chooser.getExtensionFilters().add(new ExtensionFilter("Only Zip Files","*.zip"));
            chooser.setInitialDirectory(new File(System.getProperty("user.home")));
            File selectedFile = chooser.showOpenDialog(mainStage);
            if(selectedFile != null){
                try {
                    zipFile = new ZipFile(selectedFile);
                    filePath.setText(selectedFile.getAbsolutePath());
                    contentViewBuilder(zipFile.entries());
                }
                 catch (ZipException e){
                     e.printStackTrace();
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } 
    });
 
    extractButton.setOnAction(new EventHandler<ActionEvent>(){
        public void handle(ActionEvent arg0) {
            if(zipFile != null){
                DirectoryChooser chooser = new DirectoryChooser();
                chooser.setTitle("Selecciona una carpeta");
                chooser.setInitialDirectory(new File(System.getProperty("user.home")));
                File selectedFolder = chooser.showDialog(mainStage);
                if(selectedFolder != null){
                    extractTo(selectedFolder);
                }
            }
        }
    });
    Scene scene = new Scene(root,645,500);
    mainStage.setScene(scene); 
    mainStage.setTitle("Zip Extractor");
    mainStage.show();
    mainStage.setResizable(false);
 
private void contentViewBuilder(Enumeration<? extends ZipEntry> e){
    while(e.hasMoreElements()){
        ZipEntry entry = e.nextElement();
        contentView.appendText(entry.getName());
        contentView.appendText("\n");
    }
}
 
private void extractTo(File directory){
    String path = directory.getAbsolutePath();
    String zipFileName = new File(zipFile.getName()).getName();
    zipFileName = zipFileName.substring(0, zipFileName.indexOf("."));
    path = path+File.separator+zipFileName;
    //dirección donde se guardará el contenido del zip
    File f = new File(path);
    f.mkdir();
    try {
        FileInputStream fis = new FileInputStream(new File(zipFile.getName()));
        ZipInputStream zis = new ZipInputStream(fis);
        ZipEntry entry = zis.getNextEntry();
        while(zis.available() != 0){
            if(entry.isDirectory()){
                f = new File(path+File.separator+entry.getName());
                f.mkdir();
                System.out.println(f.getAbsolutePath());
            }
            else{
                f = new File(path+File.separator+entry.getName());
                System.out.println(f.getAbsolutePath());
                FileOutputStream fos = new FileOutputStream(f);
                byte[] data = new byte[256];
                while(zis.read(data,0,256) != -1){
                    fos.write(data,0,256);
                }
                fos.close();
            }
            zis.closeEntry();
            entry = zis.getNextEntry();
        }
        zis.close();
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("Done!");
    }
}
 
Como siempre me despido con una captura de pantalla de la aplicación, espero les haya parecido interesante así que compártanlo y comenten, hasta la próxima!. 

 
Archivos de descarga
 
 

Comentarios