Foros del Web » Programación para mayores de 30 ;) » Java »

ordenar números de un fichero con FileReader

Estas en el tema de ordenar números de un fichero con FileReader en el foro de Java en Foros del Web. Hola a todos este es el enunciado del problema: Realizar un interfaz gráfica con un TextField y un Button para introducir números enteros, en caso ...
  #1 (permalink)  
Antiguo 17/06/2015, 17:38
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años
Puntos: 2
ordenar números de un fichero con FileReader

Hola a todos este es el enunciado del problema: Realizar un interfaz gráfica con un TextField y un Button para introducir números enteros, en caso de no ser un número entero mostrar un mensaje informativo al usuario diciendo el error y dejando el foco TextField y el campo en blanco. Cada número que se inserte debe guardarse en un fichero denominado datos.dat. Cuando no se introduce datos, cadena vacía, abre una ventana con TextArea con los números del fichero ordenado de forma decreciente. Cuando se cierra se cierra todo.

Escribir me escribe perfectamente, pero a la hora de leer . Me da esté fallo: Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0

Aquí pongo mi clase que muestra:

Código:
package ficheroordenado;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import javax.swing.JOptionPane;

/**
 *
 * @author Nephalem
 */


public class mostrarodenado extends javax.swing.JFrame {

  File archivo;//para poder crear el fichero
  FileReader fr; //para leer el fichero de texto.
  BufferedReader br;//para mostrar con el bufferedReader en ficheros de texto
  int TamañoArray;
    
  public mostrarodenado() {
     
        
        initComponents();
         archivo= new File ("datos.txt");
           /*aquí llamamos a la constante del array y le asignamos valor
      el tamaño se calcula dividiendo la longitud del archivo entre lo que ocupa dividido entre 8
         ESTO DEBE IR DESPUES DE CREAR EL ARCHIVO
         */
         TamañoArray = (int)archivo.length()/(Integer.SIZE/8);  
         mostrarfichero();
         this.setLocationRelativeTo(null);
    }

   public void mostrarfichero()
    {
        String cadenalee=""; //la declaro aquí porque el ámbito de la variables es solo este método.
        int [] ornintro; //array para ordenar los números del fichero
        int i = 0,x=0;//el índice del array
      
        
        ornintro=new int [TamañoArray];
     
      try 
      {
         fr=new FileReader(archivo);
         br=new BufferedReader(fr);// en vez de la salida estandar que lea desde el fichero
      
/*lee el fichero hasta que se encuentre una línea en blanco(lee línea por línea*/
            cadenalee=br.readLine();
          while(cadenalee!=null) 
                {
                       
                        ornintro[i]=Integer.parseInt(cadenalee);
                        br.readLine();
                        i++;
                  
                }
             fr.close();
      
           
     Arrays.sort(ornintro);
      
         //volcando al textarea los números ordenados.
         
         for(i=TamañoArray-1; i>=0;i--)
         {
             areanumeros.setText(Integer.toString(ornintro[i]));
         
         }
  
      
      } catch (FileNotFoundException ex)
      {
         JOptionPane.showMessageDialog(this,"no se encuentra el fichero.");
      }
      catch(IOException io)
      {
             JOptionPane.showMessageDialog(this,"Error al leer el fichero");
      }
        
    }
Ya revisé 20000 veces, pero no entiendo porqué me falla, AYUDENME es para entregarlo mañana a las 11:15 de la mañana.

Gracias.
  #2 (permalink)  
Antiguo 17/06/2015, 18:21
inazense
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: ordenar números de un fichero con FileReader

Creo que ese es un error porque estás intentado acceder a una posición del array inexistente.
Hazte una traza de las posiciones a las que accedes con el iterador y las posiciones que guardas en memoria a ver que muestra
  #3 (permalink)  
Antiguo 17/06/2015, 18:31
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años
Puntos: 2
Respuesta: ordenar números de un fichero con FileReader

perdona, pero soy bastante novata con java. Podrías explicarte mejor
Gracias por contestar
  #4 (permalink)  
Antiguo 18/06/2015, 00:28
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: ordenar números de un fichero con FileReader

Buenas,

Aparentemente inicializas la variable TamañoArray despues de leer el fichero, por lo que cuando haces esto:
ornintro=new int [TamañoArray];

TamañoArray (OJO con la ñ!!) vale 0 y estas inicializando una array de 0 posiciones.

Por tanto, cuando haces el:
ornintro[i]=Integer.parseInt(cadenalee);
Te falla porque no existe la posicion 0 en el array (en realidad no existe ninguna posicion).

En cualquier caso aun tienes mas errores, porque por ejemplo la siguiente linea lee el fichero sin asignarla a ninguna variable. Deberias hacer mejor asi:
Código Java:
Ver original
  1. ornintro[i++]=Integer.parseInt(cadenalee);
  2. cadenalee = br.readLine();

No he mirado mas pero seguramente hay mas cosas.


Un saludo
__________________
If to err is human, then programmers are the most human of us
  #5 (permalink)  
Antiguo 18/06/2015, 06:26
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años
Puntos: 2
Respuesta: ordenar números de un fichero con FileReader

Pero si lo que hago es calcular el tamaño en el constructor, usando el .

No estoy leyendo el fichero todavía, ni siquiera creo el lector FileReader.

O estoy equivocada o no entendí bien

Por cierto profesor_Falken ya arreglé lo del br.readline(), no me dí cuenta.

Sigo todavía con lo del array. ¿Podría revisar de nuevo mi codigo?

Gracias a los 2 que habeis contestado
  #6 (permalink)  
Antiguo 18/06/2015, 06:46
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: ordenar números de un fichero con FileReader

Buenas,

Cierto, no habia visto que mostrarodenado() era el constructor. Tienes que intentar respetar la convencion de nomenclatura. En Java los nombres de clases deben comenzar en mayuscula.
Por otro lado, tambien me despisto este comentario:
Cita:
ESTO DEBE IR DESPUES DE CREAR EL ARCHIVO
Puedes imprimir en consola le valor de TamanoArray antes de usarlo y decirnos que te da?:
Código Java:
Ver original
  1. TamañoArray = (int)archivo.length()/(Integer.SIZE/8);
  2. System.out.println("Longitud array: " + TamanoArray);

En mi opinion no encuentra el fichero y por lo tanto su .length() es 0.
Puedes verificarlo haciendo:
Código Java:
Ver original
  1. archivo= new File ("datos.txt");
  2. if (!archivo.exists()) {
  3.      System.out.println("No se encuentra el archivo");
  4. }

Un saludo
__________________
If to err is human, then programmers are the most human of us
  #7 (permalink)  
Antiguo 18/06/2015, 07:04
 
Fecha de Ingreso: abril-2007
Mensajes: 166
Antigüedad: 17 años
Puntos: 2
Respuesta: ordenar números de un fichero con FileReader

Si hago esto en el constructor

Código:
initComponents();
        archivo= new File ("datos.dat");
        if (!archivo.exists()) 
        {
            System.out.println("No se encuentra el archivo");
        }        
           /*aquí llamamos a la constante del array y le asignamos valor
      el tamaño se calcula dividiendo la longitud del archivo entre lo que ocupa dividido entre 8
         ESTO DEBE IR DESPUES DE CREAR EL ARCHIVO
         */
         TamañoArray = (int)archivo.length()/(Integer.SIZE/8);  
         System.out.println(TamañoArray);
         mostrarfichero();
         this.setLocationRelativeTo(null);
    }
me devuelve 1

El fichero no lo encontraba porque le cambié la extensión, pero eso ya está solucionado

Aún con el fichero encontrado, sigue mostrando 1
  #8 (permalink)  
Antiguo 18/06/2015, 07:46
Avatar de Profesor_Falken  
Fecha de Ingreso: agosto-2014
Ubicación: Mountain View
Mensajes: 1.323
Antigüedad: 9 años, 8 meses
Puntos: 182
Respuesta: ordenar números de un fichero con FileReader

Buenas,

Y cual es el tamano/contenido del fichero entonces?

Puedes cambiarlo asi?

Código Java:
Ver original
  1. initComponents();
  2.         archivo= new File ("datos.dat");
  3.         if (!archivo.exists())
  4.         {
  5.             System.out.println("No se encuentra el archivo");
  6.         }        
  7.            /*aquí llamamos a la constante del array y le asignamos valor
  8.       el tamaño se calcula dividiendo la longitud del archivo entre lo que ocupa dividido entre 8
  9.          ESTO DEBE IR DESPUES DE CREAR EL ARCHIVO
  10.          */
  11.          System.out.println("Tamano en bytes del fichero: " + archivo.length());
  12.          TamañoArray = (int)archivo.length()/(Integer.SIZE/8);  
  13.          System.out.println(TamañoArray);
  14.          mostrarfichero();
  15.          this.setLocationRelativeTo(null);
  16.     }

Un saludo
__________________
If to err is human, then programmers are the most human of us

Etiquetas: clase, fichero, string, valor
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:59.