Java

Algunas API’s Java que te pueden servir: commons-io

2

commons-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

1

A pedido del Sr: @perrefe les dejo un tip de performance para iterar sobre Map<K,V>:

Supongamos que nuestro Map tiene como key un String y como value un Integer, declarado de esta forma:

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 al cual le sacan primero la lista de keys y después iteran el Map para sacar el value, no pierda tiempo escribiendo código de más y haciendo que su aplicación ande mas lenta.

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

0

Si 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

1

Si 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).

new JAVA_HOME

export JAVA_HOME=/home/guzy_pcollaog/java

3

Para el que entienda… excelente… para el que no… que pregunte :D
new JAVA_HOME

Go to Top