Búsqueda por palabras claves

No se olviden de consultar por palabras claves! Ejemplo de Estructura de datos en java, tutorial de estructura de datos
Búsqueda personalizada
Mostrando entradas con la etiqueta Ficheros java. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ficheros java. Mostrar todas las entradas

lunes, 23 de noviembre de 2015

Lectura de archivos java y pasar a una Lista Simplemente enlazada

Ejemplo de lectura de archivos y Lista Simples

En este ejemplo se muestra cómo realizar la lectura de datos desde un archivo, cada línea del archivo contiene campos que se encuentran separados por un caracter especial, una vez que se lee la línea se debe separar cada uno de las palabras y pasarlos a ser almacenados en una Lista simplemente enlazada que va creciendo dinámicamente.

 Crear en Eclipse un nuevo proyecto de java, en mi caso LecturaArchivo.  A continuación se presenta la imagen del proyecto.


En un archivo de texto voy a tener el siguiente contenido:


Crear la Clase Nodo 

public class Nodo {
      private String palabra;
      private Nodo siguiente;
 public Nodo(String palabra, Nodo siguiente) {
  super();
  this.palabra = palabra;
  this.siguiente = siguiente;
 }
 public String getPalabra() {
  return palabra;
 }
 public void setPalabra(String palabra) {
  this.palabra = palabra;
 }
 public Nodo getSiguiente() {
  return siguiente;
 }
 public void setSiguiente(Nodo siguiente) {
  this.siguiente = siguiente;
 }
       
}
Crear la Clase Lista
Para esta clase vamos a crear cuatro métodos principales el agregarNodoFinal la cual se encarga de ir creando un nodo dinámicamente al final de la lista, la cual contiene una palabra leida desde el fichero. El segundo método es imprimir la lista en pantalla para verificar que se guardó la información en la lista simple. Un tercer método que se va encargar de leer un archivo que se le pasa el path/ubicación por parámetro y lo que hace es ir leyendo linea a linea y en un texto auxiliar se va acumulando los Strings, Finalmente se separan el texto auxiliar que tiene acumulado todo el texto del fichero y se separa cada una de las palabras.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;


public class Lista {
 Nodo inicio;
 Nodo fin;
 public Lista() {
  
  inicio=fin=null;
 }
 
 public void agregarNodoFinal(String dato){
  Nodo nuevo=new Nodo(dato,null);
  if(inicio==null){
   inicio=fin=nuevo;
  }else{
   fin.setSiguiente(nuevo);
   fin=nuevo;
   
  }
  
 }
 
 public void imprimir(){
  Nodo aux=inicio;
  while(aux!=null){
   System.out.println(aux.getPalabra());
   aux=aux.getSiguiente();
  }      
 }
 
 
 public String leerArchivo(String path){
  
  String total="";
  try {
   FileReader fr=new FileReader(new File(path));
   BufferedReader br=new BufferedReader(fr);
   
   String linea="";
   while(  (linea=br.readLine())!=null){
    total=total+linea+"\n";
    
   }
   
   
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   System.out.println("Problemas de archivo: "+e.getMessage());
  } catch (IOException e) {
   // TODO Auto-generated catch block
   System.out.println("Problemas en la lectura del archivo: "+e.getMessage());
  }
  
  return total;
  
  
 }
 
 
 public Lista separar(String total){
  System.out.println(total);
  Lista coleccion=new Lista();
  StringTokenizer st = new StringTokenizer(total, " \n,");
        while (st.hasMoreTokens()) {
            String palabra = st.nextToken();
            coleccion.agregarNodoFinal(palabra);
       }
  return coleccion;
  
 }
 
 

}

La clase Principal (Lectura) consta del siguiente código:

public class Lectura {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Lista inform=new Lista();
        String total=inform.leerArchivo("texto.txt");
        Lista resultado=inform.separar(total);
        resultado.imprimir();
        
    }
    
}