Vereis, he construido el siguiente codigo que lo que hace es ordenar un vector de enteros según el orden alfabetico de las lineas de un fichero de acceso aleatorio para asi poder mostrar las lineas en orden "alfabetico" sin usar estructuras como vectores.
Código:
Bueno, como podreis ver es el clasico algoritmo burbuja para ordenar retocado para mi caso. Situar_puntero es una funciona que devuelve la posicion del puntero donde empieza (en nuestro fichero) el numero de linea especificada.public Vector Ordenar_NombreGA(RandomAccessFile f, Vector v) throws IOException { f.seek(0); for (int i = 0; i < v.size(); i++) { for (int j = 0; i < v.size() - 1; j++) { this.Situar_Puntero(i); long numero1 = this.getPl(); this.Situar_Puntero(j); long numero2= this.getPl(); f.seek(numero1); String s1 = f.readUTF(); f.seek(numero2); String s2 = f.readUTF(); if (s1.compareToIgnoreCase(s2) > 0) { this.intercambiar(v, j, j + 1); } } } f.close(); return v; }
Ahora bien, aunque la ordenacion me la hace correctamente (es decir, visualizo mi vector y realiza la ordenacion de manera correcta) me salta una excepción que no se situarla en el contexto
Código:
Según he googleado por ahi, esa excepción salta cuando has llegado al final de un stream e intentas seguir leyendo. Por eso me escama ya que f.readUTF() deberia tener contemplada esa posibilidad... ¿no?Exception in thread "main" java.io.EOFException at java.io.RandomAccessFile.readFully(RandomAccessFile.java:383) at java.io.DataInputStream.readUTF(DataInputStream.java:592) at java.io.RandomAccessFile.readUTF(RandomAccessFile.java:887) at farmacia.Manipulador.Ordenar_NombreGA(Manipulador.java:113)
Gracias por las futuras ayudas =)