Social

sábado, 23 de febrero de 2013

Java: Codificar archivos y cadenas a Base64

En una entrada anterior (esta) se mostró una herramienta que hacia posible convertir archivos y/o cadenas a su respectivo código Base64. Para realizar esta operación ya existen librerías que permiten hacer la conversión simplemente importándola. 

Tal es el caso de la librería commons-codec de Apache, la cual se puede descargar en el siguiente link o directamente de la pagina de Apache. El siguiente código muestra como realizar la codificación ya sea con archivos o cadenas.

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import org.apache.commons.codec.binary.Base64;
public class CodeBase64 {
/**
* @param args
*/
public static void main(String[] args) {
Base64 base64 = new Base64();
/*----------------ARCHIVOS------------------*/
File file = new File("C:\\archivo.txt");
byte[] fileArray = new byte[(int) file.length()];
InputStream inputStream;
String encodedFile = "";
try {
inputStream = new FileInputStream(file);
inputStream.read(fileArray);
encodedFile = base64.encodeToString(fileArray);
} catch (Exception e) {
// Manejar Error
}
System.out.println(encodedFile);
/*----------------CADENAS------------------*/
String cadena = "Cadena";
String encodedString = "";
encodedString = base64.encodeToString(cadena.getBytes());
System.out.println(encodedString);
}
}
view raw Code64.java hosted with ❤ by GitHub

Podemos observar que se importa la clase "org.apache.commons.codec.binary.Base64", la cual esta disponible al agregar la librería descargada. Para aprender como agregar la librería en eclipse pueden ver la siguiente entrada. El resto del código es relativamente sencillo. Convertimos el archivo o cadena a un array de bytes y se lo agregamos como parámetro al método encodeToString() de la clase Base64. Luego simplemente desplegamos el código en Base64.

jueves, 7 de febrero de 2013

Java: Operador Ternario

El operador ternario, o el if de una linea, es otra forma de evaluar una condición y devolver un valor dependiendo si la condición es falsa o verdadera. Tiene tres parámetros: Condición, valor si verdadero y valor si falso. En la siguiente linea de código se puede observar un If normal que le asigna un valor a una variable.

int var1 = 4;
int var2 = 5;
int ans;
if (var1 > var2) {
ans = 1;
} else {
ans = -1;
}
view raw ifnormal.java hosted with ❤ by GitHub
La forma de trasformar este if sencillo en una sentencia con operador ternario es de la siguiente forma.
int resp = (var1 > var2) ? 1 : -1;
String cadena = "Cadena";
String letras = (cadena.length() > 1) ? "1 Letra" : "2 o más letras";
view raw ifternario.java hosted with ❤ by GitHub

La condición puede ser tan compleja como se desee, lo único que se necesita es que regrese una variable tipo boolean.

sábado, 2 de febrero de 2013

JavaFX: Abrir y Guardar Archivos

Para abrir y guardar archivos en JavaFX, simplemente usamos la clase FileChooser que sustituye al viejo JFileChooser. Esta clase esencialmente tiene dos métodos importantes que son:

showOpenDialog(Stage stage) <- Para abrir archivos showSaveDialog(Stage stage) <- Para guardar archivos

Ambos tienen un atributo "stage" que es la ventana actual de la cual fueron llamados.


La lectura y escritura de archivos sigue siendo con las clases del paquete io de java. En el siguiente código esta una clase funcional que les permite abrir/guardar y leer/escribir archivos.


import java.io.*;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
public class FileExample extends Application implements
EventHandler<ActionEvent> {
private TextArea textArea;
private Stage stage;
private Button openButton;
private Button saveButton;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
stage = primaryStage;
stage.setTitle("Ejemplo de Archivos");
textArea = new TextArea();
openButton = new Button("Abrir");
openButton.setOnAction(this);
openButton.setTranslateX(80.0);
saveButton = new Button("Guardar");
saveButton.setOnAction(this);
HBox top = new HBox(150);
top.getChildren().addAll(openButton, saveButton);
Group root = new Group();
Scene scene = new Scene(root, 465, 280, Color.WHITE);
BorderPane border = new BorderPane();
border.setCenter(textArea);
border.setTop(top);
root.getChildren().add(border);
primaryStage.setScene(scene);
primaryStage.show();
}
@Override
public void handle(ActionEvent event) {
Button b = (Button) event.getSource();
if (b.getText().equals("Abrir")) {
FileChooser fileChooser = new FileChooser();
File file = fileChooser.showOpenDialog(stage);
if(file!=null){
FileReader fr = null;
BufferedReader br = null;
String texto = "";
try {
fr = new FileReader(file);
br = new BufferedReader(fr);
String st = br.readLine();
while (st != null) {
texto = texto + st + "\n";
st = br.readLine();
}
} catch (Exception e) {
textArea.appendText(e.toString());
} finally {
try {
fr.close();
} catch (Exception e2) {
textArea.appendText(e2.toString());
}
}
textArea.appendText(texto);
}
} else if (b.getText().equals("Guardar")) {
FileChooser fileChooser = new FileChooser();
File file = fileChooser.showSaveDialog(stage);
if(file!=null){
FileWriter fw = null;
BufferedWriter bw = null;
try {
// EL segundo parametro es un boolean
// En true escribe al final
// En false escribe al inicio
fw = new FileWriter(file, false);
bw = new BufferedWriter(fw);
String texto = textArea.getText();
bw.write(texto, 0, texto.length());
} catch (Exception e) {
textArea.appendText(e.toString());
} finally {
try {
bw.close();
} catch (Exception e2) {
textArea.appendText(e2.toString());
}
}
}
}
}
}
view raw FileExample hosted with ❤ by GitHub