Java
Algunas API’s Java que te pueden servir: commons-io
2commons-io trae un montón de clases que te pueden servir al momento de utilizar lecturas y escrituras de archivos, entre otras cosillas.
Por si no lo sabías una de las malas practicas mas recurrentes programando con java es, no cerrar los Stream y ciertos Readers adecuadamente, o te complicas mucho con los try/catch, vamos a ver un par de ejemplos clásicos:
Primero agregamos la dependencia de maven, ojo que las versiones 2.x están escritas para Java 1.5 y las 1.x para java 1.3 y 1.4:
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.0.1</version> </dependency>
Caso 1: finally que asegura cerrar el Reader con el método close()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public void closeWithFinally(String filename) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(filename)); try { StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line); } String contentFile = sb.toString(); System.out.println(contentFile); } finally { // Cerrar el reader reader.close(); } } |
Caso 2: Creando la instancia de BufferedReader dentro del try y validando si es null al momento de cerrar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public void closeWithFinallyNullCheck(String filename) throws IOException { BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(filename)); String line = null; StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line); } String contentFile = sb.toString(); System.out.println(contentFile); } finally { // Cerrar el reader if (null != reader) { reader.close(); } } } |
Caso 3: Usando commons-io y la clase IOUtils se reduce bastante el código y quedaría algo así:
1 2 3 4 5 6 7 8 9 | public void closeWithFinallyCommonsIO(String filename) throws IOException { BufferedReader reader = new BufferedReader(new FileReader(filename)); try { String contentFile = IOUtils.toString(reader); System.out.println(contentFile); } finally { IOUtils.closeQuietly(reader); } } |
Mas información en el maven site del proyecto:
Mas adelante escribiré un par de ejemplos con otras clases de commons-io que son bastante útiles.
Cómo iterar un Map con Java 1.5
1A pedido del Sr: @perrefe les dejo un tip de performance para iterar sobre Map<K,V>:
Supongamos que nuestro Map
1 | Map<String,Integer> map = new HashMap<String,Integer>(); |
Ahora podemos iterar el Map de la siguiente forma:
1 2 3 4 | for (Entry<String, Integer> entry : map.entrySet()) { System.out.println("Key [" + entry.getKey() + "]"); System.out.println("Value [" + entry.getValue() + "]"); } |
Si ve por ahí algún iterador sobre un Map
Por favor no haga esto!!!
1 2 3 4 5 6 7 | Set<String> keys = map.keySet(); for (String key : keys) { Integer value = map.get(key); System.out.println("Key [" + key + "]"); System.out.println("Value [" + value + "]"); } |
Espero les sirva.
Error con archivos zip/ear/jar en Midnight Commander
0Si eres de los que usa mucho el terminal y necesitas modificar archivos empaquetados, tales como: ear, jar, war, zip, rar o tar.gz, en la ultima versión de Midnight Commander (mc para los amigos) tiene un feo bug problema, que es cuando entras a uno de esos archivos no te muestra nada en el contenido.
La solución es simple tienes que modificar este archivo /usr/share/mc/extfs/uzip, y buscar la línea que dice my $op_has_zipinfo = 0; y cambiar el valor por un 1
# Location of the zip program my $app_zip = "/usr/bin/zip"; # Location of the unzip program my $app_unzip = "/usr/bin/unzip"; # Set this to 1 if zipinfo (unzip -Z) is to be used (recommended), otherwise 0. my $op_has_zipinfo = 0;
Debe quedar de esta forma:
# Location of the zip program my $app_zip = "/usr/bin/zip"; # Location of the unzip program my $app_unzip = "/usr/bin/unzip"; # Set this to 1 if zipinfo (unzip -Z) is to be used (recommended), otherwise 0. my $op_has_zipinfo = 1;
Ahora debería queda funcionando de pelos.
Mas información aquí: Launchpad
Problema de los botones de Eclipse en Ubuntu 9.10 Karmic
1Si te has vuelto mono haciendo clicks cuando trabajas con Eclipse en Ubuntu 9.10 Karmic Koala, aquí les dejo una solución que encontré por ahí:
Deben crear un pequeño script que configura una variable de entorno y luego llama al binario de eclipse, veamos el script eclipse.sh
#!/bin/sh export GDK_NATIVE_WINDOWS=1 cd $HOME/Software/eclipse ./eclipse
El problema (bug) al parecer es en cómo Eclipse a través de SWT hace uso de las librerías de GTK dejando inhabilitado las acciones de los botones y otros componentes como por ejemplo los árboles desplegables con checkbox (ventana de los updates).
export JAVA_HOME=/home/guzy_pcollaog/java
3Para el que entienda… excelente… para el que no… que pregunte ![]()
