Algunas APIs Java que te pueden servir: commons-io

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:

1
2
3
4
5
<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.