feed twitter facebook LinkedIn facebook

Java » Convertir un fichero ISO en UTF-8

enero 14, 2012 por Víctor Cuervo 1 Comentario Imprimir Imprimir

Apoyándonos en los ejemplos que nos enseñaban a generar ficheros en ISO y a generar ficheros en UTF-8, así como en los que leian de un fichero en ISO y leian un fichero en UTF-8 vamos a construir un código que nos permita hacer la conversión. Es decir, convertir un fichero ISO en un fichero UFT-8.

La idea es muy sencilla, lo que tendremos que hacer es abrir un stream de lectura sobre un fichero ISO y un stream de escritura sobre un fichero UTF-8.

Para realizar la escritura del fichero ISO utilizamos un BufferedReader sobre un InputStreamReader. Será en el InputStreamReader dónde indicaremos la codificación del fichero a leer. La codificación "8859_1" es la que representa el ISO.

El código será el siguiente:

  1. BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("FicheroISO1.txt"), "8859_1"));

La apertura del stream de escritura será muy similar, pero en este caso utilizando un BufferedWriter y un OutputStreamWriter. Al igual que en la anterior línea de código, es el OutputStreamWriter con el que indicamos la codificación. Esta será utf-8.

  1. Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("FicheroSalidaUTF8"), "utf-8"));

Ya solo nos queda ir leyendo del BufferedReader y volcando sobre el .

  1. String sCadena;
  2. while ((sCadena = in.readLine())!=null) {
  3. System.out.println(sCadena);
  4. out.write(sCadena);
  5. }

El último paso de nuestro código de conversión es el cierre de los ficheros.

  1. in.close();
  2. out.close();

Con una lectura/escritura y teniendo en cuenta las codificaciones de los ficheros, hemos conseguido, de una forma sencilla, convertir un fichero de ISO a UTF-8.

Java » Obtener la ruta absoluta de un fichero con Java

enero 7, 2012 por Víctor Cuervo 15 Comentarios Imprimir Imprimir

Si queremos saber dónde se encuentra un fichero ubicado en el disco duro deberemos de obtener la ruta absoluta del fichero. Para poder llevar a cabo esto nos vamos a basar en los métodos de la clase File de Java.

Lo primero será instanciar la clase File con el fichero del que queremos obtener la ruta absoluta.

  1. File fichero = new File("test.txt");

Ahora simplemente deberemos de apoyarnos en el método .getAbsolutePath() para obtener la ruta absoluta. La línea de código será la siguiente:

  1. System.out.println("La ruta del fichero es: " + fichero.getAbsolutePath());

Como vemos, en un simple método tenemos la ruta absoluta de un fichero con Java.

Java » Crear un fichero temporal con Java

noviembre 23, 2011 por Víctor Cuervo 3 Comentarios Imprimir Imprimir

Ayer nos interesábamos por saber cual es el directorio temporal del sistema con Java. Y es que hoy vamos a generar un fichero temporal con Java y claro está, deberíamos saber dónde ir a buscarlo.

Creo que no hace falta explicar la utilidad de los ficheros temporales. Simplemente tenemos que saber que no todos los datos que utilizamos en nuestros programas tienes porqué ser guardados. En esos casos, utiliza ficheros temporales.

Java nos ofrece un conjunto de métodos muy extensos en la clase File y uno de ellos es createTempFile(). El método createTempFile() nos crea un fichero temporal en el directorio que le digamos o en el directorio temporal del sistema.

Creemos el fichero...

  1. File tempFile = File.createTempFile("mificherotemporal",null);

Es muy importante que el fichero creador por createTempFile() tendrá un número generado aleatoriamente. A dicho número le podemos añadir un prefijo o sufijo para añadirlo. En nuestro caso le hemos antepuesto 'mificherotemporal' y no le hemos asignado sufijo.

Siempre que crees ficheros en Java con la clase File recuerda el manejar la excepción IOException.

Una cosa importante cuando trabajamos con ficheros temporales en Java es que, estos, por defecto no se borran. Si lo que queremos es borrar el fichero cuando termine nuestro programa deberemos de llamar al método .deleteOnExit().

  1. tempFile.deleteOnExit();

Ya solo nos queda volcar algo de contenido sobre nuestro fichero temporal.

  1. BufferedWriter out = new BufferedWriter(new FileWriter(tempFile));
  2. out.write("Esto es un fichero temporal");
  3. out.close();

Y trabajo hecho. Ya tenemos creado nuestro fichero temporal con Java.

Java » Directorio Temporal del Sistema en Java

noviembre 22, 2011 por Víctor Cuervo 3 Comentarios Imprimir Imprimir

El directorio temporal del sistema será aquel directorio dónde volquemos los ficheros que no tengan utilidad final, aquellos que solo estemos utilizando para fines temporales.

Si queremos saber cual es el directorio temporal del sistema en Java deberemos de utilizar la clase System y acceder a las propiedades del sistema. En concreto deberemos de acceder a la propiedad java.io.tmpdir. Para ello utilizamos el método .getProperty().

Solo tenemos que volcarlo por la consola:

  1. System.out.println("El directorio temporal del sistema es "
  2. + System.getProperty("java.io.tmpdir"));

En sucesivos artículos trabajaremos con ficheros temporales que dejaremos en el directorio temporal del sistema.

Java » Convertir de Fichero a URL con Java

octubre 13, 2011 por Víctor Cuervo 1 Comentario Imprimir Imprimir

Cuando manejamos ficheros de configuración una buena idea es tratar todos los ficheros como si fuesen URL. Así evitaremos el estar chequeando si el fichero de acceso está en nuestra máquina os es una URL destino. Por lo tanto vamos a convertir de Path a una URL utilizando el lenguaje Java.

Lo primero será partir de un fichero, el cual instanciaremos mediante una clase File.

  1. File fichero = new File("test.txt");

Si vemos el path del fichero veremos que es una cosa así:

C:\Users\lineadecodigo\files\test.txt

El siguiente paso será realizar la conversión de fichero a URL. Esto lo hacemos mediante el método .toURL() que trae la clase File.

  1. URL url = null;
  2. url = fichero.toURL();

Tenemos que tener cuidado en esta conversión ya que podemos tener una MalformedURLException y habrá que controlarla mediante un bucle try-catch

Si ahora volcamos el contenido de la URL veremos que tenemos una cosa así:

file:/C:/Users/lineadecodigo/files/test.txt

La conversión de Path a URL la podemos hacer a la inversa, es decir de URL a Path. Para ello utilizamos el método .getFile() de la clase URL.

  1. File fichero2 = new File(url.getFile());

Pero como decíamos al principio, lo mejor tratar con las URL de los ficheros.

Java » Escribir un fichero UTF-8

octubre 12, 2011 por Víctor Cuervo Sin Comentarios Imprimir Imprimir

Si ya escribimos un fichero en ISO Latin 1, ahora vamos con el encoding UTF-8. Y es que el procedimiento es similar, y solo tendremos que prestar atención al encoding a utilizar.

El encoding utf-8 lo vamos a indicar en el OutputStream. Y es que nuestro stream de datos de salida en Java o OutputStream recibirá el encoding "utf-8" y el fichero dónde escribiremos mediante una instancia de FileOutputStream.

  1. ew OutputStreamWriter(new FileOutputStream("FicheroSalidaUTF8.txt"), "utf-8");

Ahora solo necesitaremos un Buffer Java de salida, un BufferedWriter para ir volcandole los datos.

  1. BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("FicheroSalidaUTF8.txt"), "utf-8"));

En este tipo de manipulaciones tienes que tener cuidado con las excepciones Java UnsupportedEncodingException e IOException.

Los datos los volcamos con el método .write():

  1. out.write("Esto es un fichero UTF8");

Por último cerraremos el fichero mediante un método .close():

  1. out.close();

Java » Escribir un fichero ISO Latin 1

septiembre 25, 2011 por Víctor Cuervo 5 Comentarios Imprimir Imprimir

Si aprendiste a leer un fichero con un enconding ISO Latin 1, ahora vamos a ver cómo podemos escribir un fichero ISO Latin 1 con Java.

El punto en el que hay que especificar el encoding es con la clase OutputStreamWriter. Y es que la clase OutputStreamWriter recibe el fichero al que queremos escribir y el encoding con el que escribimos.

  1. OutputStreamWriter(new FileOutputStream("FicheroSalidaISO1.txt"), "8859_1")

Como vemos el fichero al que escribimos lo instanciamos mediante FileOutputStream. Y el encoding utilizado para escribir un fichero ISO Latin 1 es "8859_1".

Solo nos quedará apoyarnos en un Buffer, en concreto en un BufferedWriter para enviar el texto al fichero.

  1. BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("FicheroSalidaISO1.txt"), "8859_1"));

Una vez que hemos abierto el BufferedWriter, empezamos a ejecutar sentencias de escritura mediante el método .write().

  1. out.write("Esto es un fichero ISO Latin 1");

Por último tenemos que cerrar el stream sobre el fichero. Para esto nos apoyamos en el método .close().

  1. out.close();

Si vemos el código completo veremos que hay que controlar las excepciones UnsupportedEncodingException e IOException.

  1. try {
  2. BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("FicheroSalidaISO1.txt"), "8859_1"));
  3. out.write("Esto es un fichero ISO Latin 1");
  4. out.close();
  5. e.printStackTrace();
  6. } catch (IOException e) {
  7. e.printStackTrace();
  8. }

Con pocas líneas hemos escrito un fichero ISO Latin 1.

Java » Leer un fichero UTF-8

septiembre 22, 2011 por Víctor Cuervo 1 Comentario Imprimir Imprimir

Cuándo accedemos a un fichero tenemos que tener cuidado en su codificación. Como ya vimos al leer un fichero en ISO Latin 1. En este caso vamos a leer un fichero UTF-8.

Hay que tener especial cuidado con la codificación del fichero ya que dependiendo del encoding hay carácteres que se representan de diferente forma, o simplemente que no se representan.

Los pasos para leer el fichero UTF-8 son muy sencillos. Ya que la lectura se hace sobre un BufferedReader, al cual hay que darle un InputStreamReader de entrada.

Y será sobre el InputStreamReader donde indiquemos el encoding del fichero. En nuestro caso al ser uft-8 deberemos de utilizar el charset "uft-8". Quedándonos la siguiente línea de código:

  1. BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream("FicheroUTF8.txt"), "utf-8"));

Cabe notar que el origen de lectura, es decir, el fichero, lo indicaremos con un FileInputStream.

Ya solo nos quedará recorrer el fichero mediante un bucle:

  1. String sCadena;
  2. while ((sCadena = in.readLine())!=null) {
  3. System.out.println(sCadena);
  4. }

Al trabajar con los encoding hay que tener especial cuidado de controlar la excepción UnsupportedEncodingException para aquellos encodings no soportados. Y al acceder a ficheros la típica excepción IOException.

Java » Listar contenido del ordenador

septiembre 19, 2011 por Víctor Cuervo 1 Comentario Imprimir Imprimir

En este ejemplo vamos a ver como podemos listar todo el contenido del ordenador, es decir, ver todos los ficheros de las diferentes unidades de nuestro sistema (disco duro, tartejas SD, DVD,...).

Para poder listar el contenido del ordenador solo tenemos que aplicar lo explicado en los artículos listar un directorio de forma recursiva en Java y unidades del sistema de ficheros con java.

Y es que en el fondo, las unidades del sistema son directorios en si mismo que podemos recorrer. Así tenemos que recorrer las unidades del sistema, recordemos que para obtener las unidades utilizamos el método .listRoots() de la clase File.

  1. File[] roots = File.listRoots();
  2. for (int i=0; i<roots.length; i++) {
  3. System.out.println("--- LISTANDO UNIDAD " + roots[i] + " ---");
  4. listarDirectorio(roots[i],"");
  5. }

Por cada unidad del sistema llamaremos al método recursivo listarDirectorio(), el cual, como vimos en listar un directorio de forma recursiva en Java, nos va mostrando los ficheros que contiene cada directorio y si el fichero es un directorio en sí mismo, se vuelve a llamar de forma recursiva.

Veamos su código:

  1. public static void listarDirectorio(File f, String separador){
  2. File[] ficheros = f.listFiles();
  3. if (ficheros!=null){
  4. for (int x=0;x<ficheros.length;x++){
  5. System.out.println(separador + ficheros[x].getName());
  6.  
  7. if (ficheros[x].isDirectory()){
  8. String nuevo_separador;
  9. nuevo_separador = separador + " ";
  10. listarDirectorio(ficheros[x],nuevo_separador);
  11. }
  12. }
  13. }
  14. }

Hay que tener cuenta que ciertos sistemas de archivos dan problema al obtener el listado de ficheros, es por ello que comprobamos si el objeto ficheros tiene contenido.

Java » Leer fichero ISO Latin 1

septiembre 16, 2011 por Víctor Cuervo 4 Comentarios Imprimir Imprimir

El lenguaje Java nos da la capacidad de acceder a ficheros que tengan diferentes codificaciones. Posiblemente, muchos de nuestros ficheros vengan codificados en ISO Latin 1, o lo que es lo mismo ISO-8859-1, Latin Alphabet No. 1.

Al existir diferentes codificaciones para el contenido, Java nos permite indicar el tipo de contenido al que accedemos, para poderlo leer los ficheros de la forma correcta.

Pero vamos por partes, lo primero que haremos será abrir el fichero. Para ello y como vimos en el artículo leer un fichero de texto con Java, necesitaremos de un BufferedReader.

Al BufferedReader tendremos que proveerlo de un stream de entrada, o lo que es lo mismo un InputStreamReader.

El InputStreamReader será la clave, ya al InputStreamReader podemos indicarle un charset de entrada. Es decir, el tipo de codificación que queremos.

En este caso, si queremos leer un fichero en ISO Latin 1 deberemos de utilizar el charset "8859_1". Pero al InputStreamReader le falta el origen, el nombre del fichero. Es decir, será de la siguiente forma:

  1. new InputStreamReader(new FileInputStream("FicheroISO1.txt"), "8859_1")

Asegúrate que el fichero tiene un encoding ISO-8859-1, Latin Alphabet No. 1.

El código de la instanciación incial quedaría de la siguiente forma:

  1. new InputStreamReader(new FileInputStream("FicheroISO1.txt"), "8859_1"));

Ahora solo nos quedará leer el contenido del fichero, como hacíamos en leer un fichero de texto con Java.

  1. String sCadena;
  2. while ((sCadena = in.readLine())!=null) {
  3. System.out.println(sCadena);
  4. }

Puedes echar un vistazo a los encodings soportados en Java 7.