miércoles, 13 de abril de 2016

Leer y escribir en ficheros de texto en Java



La lectura y escritura de datos en un fichero de texto requiere el uso de las clases PrintWriter, File y Scanner. Para escribir en un fichero de texto es necesario utilizar la clase PrintWriter. Esta clase permite crear un fichero de texto para almacenar datos. Esta clase ofrece los métodos print() y println() para escribir datos en el fichero. El método close() cierra el fichero de datos. 

Por ejemplo, para escribir un array de números enteros en un fichero de texto, es necesario crear una instancia de la clase PrintWriter.

int[][] numeros = { { 1, 2, 3, 4, 5},
{ 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}};
// la instancia ficheroSalida de la clase PrintWriter
// crea y escribe en el fichero "c:\\Numeros.txt"
String idFichero = "c:\\Numeros.txt";
PrintWriter ficheroSalida = new PrintWriter(idFichero);
// el for anidado escribe en ficheroSalida los elementos
// del array separados por el carácter ","
for (int i=0; i<numeros.length; i++) {
for (int j=0; j<numeros[i].length; j++)
ficheroSalida.print(numeros[i][j] + ",");
ficheroSalida.println("");
}
ficheroSalida.close();

El for anidado escribe todos los elementos del array en el fichero de texto.
Al finalizar se invoca al método close() del objeto ficheroSalida para cerrarlo.
El contenido del fichero de texto Numeros.txt.

1,2,3,4,5,
6,7,8,9,10,
11,12,13,14,15,
16,17,18,19,20,
21,22,23,24,25,

La clase File ofrece el método exists() para saber si un fichero existe o no. Para leer el contenido del fichero se crea una instancia de la clase Scanner que recibe como argumento la instancia del fichero de texto.

La clase Scanner ofrece el método hasNext() para saber si hay más elementos que leer y next() para leer el siguiente elemento.

La clase StringTokenizer facilita la división de una cadena de texto en componentes separados por espacios o por un carácter delimitador. En este ejemplo se crea una instancia con el delimitador “,”.

Cuando se realiza una operación de lectura o escritura de un fichero es necesario gestionar los errores en tiempo de ejecución de Java, denominados excepciones. Durante la lectura o escritura de un fichero se puede producir una excepción de tipo IOException.

Para utilizar las clases PrintWriter, File, Scanner, StringTokenizer, IOException es necesario importar los siguientes paquetes:

import java.io.PrintWriter;
import java.io.File;
import java.util.Scanner;
import java.util.StringTokenizer;
import java.io.IOException;

Para abrir un fichero de texto se crea una instancia de la clase File. El contenido del fichero se lee con una instancia de la clase Scanner. Como los números almacenados en el fichero están separados por comas, se utiliza una instancia de StringTokenizer para leer cada número. 

String idFichero = "c:\\Numeros.txt";
File ficheroEntrada=new File (idFichero);
if (ficheroEntrada.exists()) {
Scanner datosFichero = new Scanner(ficheroEntrada);
System.out.println("Números del fichero");
while (datosFichero.hasNext()) {
StringTokenizer numerosFichero = new
StringTokenizer(datosFichero.next(),",");
while (numerosFichero.hasMoreTokens())
System.out.print(numerosFichero.nextToken() +
"\t");
System.out.println("");
}
datosFichero.close();
}
else
System.out.println("¡El fichero no existe!");

import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.io.PrintWriter;
public class LecturaEscrituraFichero {
public static void main(String[] args) throws IOException {
int[][] numeros = { { 1, 2, 3, 4, 5},
{ 6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}};
String idFichero = "c:\\Numeros.txt";
PrintWriter ficheroSalida = new PrintWriter(idFichero);
for (int i=0; i<numeros.length; i++) {
for (int j=0; j<numeros[i].length; j++)
ficheroSalida.print(numeros[i][j] + ",");
ficheroSalida.println("");
}
ficheroSalida.close();
File ficheroEntrada = new File (idFichero);
if (ficheroEntrada.exists()) {
Scanner datosFichero = new Scanner(ficheroEntrada);
System.out.println("Números del fichero");
while (datosFichero.hasNext()) {
StringTokenizer numerosFichero = new
StringTokenizer(datosFichero.next(),",");
while (numerosFichero.hasMoreTokens())
System.out.print(numerosFichero.nextToken() + "\t");
System.out.println("");
}
datosFichero.close();
}
else
System.out.println("¡El fichero no existe!");
}
}

El resultado de leer el fichero de texto:

Números del fichero
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25



Espero haber ayudado en algo. Hasta la próxima oportunidad!











  

No hay comentarios:

Publicar un comentario en la entrada