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
Publicar un comentario